2016-11-01 4 views
0

Я использую Apache Lucene Solr для индексирования и поиска данных. Здесь я пытаюсь построить операцию автозаполнения:Результаты Solr, сгруппированные по полю (но группировка фасет)

У меня есть документы, например, люди. Предположим, что человек описывается некоторыми полями в документе, id, имени, работе, гражданстве. (Ник Фьюри, Доктор, Английский/Джон Док, Учитель, Доминикан/Джим Тайсон, Док-работник, Польский язык). Когда я пишу "делать" мы хотим, чтобы предложения быть:

--- Работа (ярлык)

Доктор

Dock Worker

--- Национальность (ярлык)

Доминиканская

--- Наименование (ярлык)

John Dock

Итак, мы хотим что-то вроде Саундэстера, я попробовал, но с результатами, сгруппированными в соответствии с выбранным полем, всегда с определенным порядком: сначала согласованные задания, затем национальности, если они существуют .... и, если возможно, внутри категорий мы можем сортировать по количеству или релевантности.

Затем я попытался с 3-мя гранями. Но я не могу найти, как группировать гранаты, чтобы иметь рабочие места, национальности ... сгруппированные все вместе.

Есть ли способ сделать это? В solr irc некоторые люди ответили, что мне нужно использовать 2 запроса. Как я могу это сделать?

Это что-то вроде этого http://www.cominvent.com/2012/01/25/super-flexible-autocomplete-with-solr/, но там, только одно поле поиска, а затем оно сгруппировано по категории. В моем примере, дело это было бы, набрав "совместную" возвращение:

--- Категории

Страна

Континента

--- Страна & Города

Колумбия

Коста-Рика ...

ответ

0

Вы можете создавать различные suggesters для каждого поля в компоненте «Предлагать»:

<searchComponent name="suggest" class="solr.SuggestComponent"> 
    <lst name="suggester"> 
     <str name="name">job</str> 
     <str name="field">job</str> 
     ... 
    </lst> 
<lst name="suggester"> 
     <str name="name">nationality</str> 
     <str name="field">nationality</str> 
     ... 
    </lst> 
</searchComponent> 

(вы можете добавить больше suggesters ...)

Тогда один «/» предложить обработчика запроса:

<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy"> 
    <lst name="defaults"> 
     <str name="echoParams">all</str> 
     <str name="wt">json</str> 
     <str name="indent">false</str> 
    <str name="suggest">true</str> 
    <str name="suggest.count">10</str> 
    </lst> 
    <arr name="components"> 
    <str>suggest</str> 
    </arr> 
</requestHandler> 

Тогда на стороне клиента:

http://localhost:8983/solr/collection1/suggest?suggest.q=co&suggest.dictionary=job&suggest.dictionary=nationality