2012-04-25 4 views
1

Я использую API solrj для запроса моего индекса SOLR 3.6. У меня есть несколько текстовых полей, которые я бы хотел похудеть. Из того, что я прочитал, я должен был бы сделать это, используя типы запросов smax или edismax. Я пробовал следующее:Усиление полей в SOLR с помощью Solrj

SolrQuery query = new SolrQuery(); 
query.setQuery("title:apples oranges content:apples oranges"); 
query.setQueryType("edismax"); 
query.set("qf", "title^10.0 content^1.0"); 
QueryResponse rsp = m_Server.query(query); 

Но это не работает. Я попробовал следующие варианты для установки типа запроса, но, похоже, это не имеет значения.

query.setQueryType("dismax"); 
query.set("qt","dismax"); 
query.set("type","edismax"); 
query.set("qt","edismax"); 
query.set("type","dismax"); 

Я хотел бы сохранить полный синтаксис запроса Lucene, поэтому я предпочитаю ExtendedDisMax для DisMax. Ускорение отдельных терминов в запросе (как показано ниже) действительно работает, но не является допустимым решением, поскольку запросы автоматически генерируются и могут быть произвольно сложными - это синтаксис.

query.setQuery("title:apples^10.0 oranges^10.0 content:apples oranges"); 

Любая помощь будет очень признательна.

ответ

6

Лучший способ было бы определить обработчик запросов в ваших solrconfig.xml как -

<requestHandler name="search" class="solr.SearchHandler" default="true"> 
<lst name="defaults"> 
    <str name="echoParams">explicit</str> 
    <str name="defType">dismax</str> 
    <str name="qf"> 
     title^1 content^0.8 
    </str> 
    <str name="q.alt">*:*</str> 
    <str name="rows">10</str> 
    <str name="fl">*,score</str> 
</lst> 
</requestHandler> 

И использовать Qt параметр для определения запроса обработчика -

query.set("qt","search"); 

Вы можете выполнить точную настройку подталкивание конфигурации, просто изменив конфигурацию solr config xml и перезагрузив ядра.

+0

Вы также можете использовать 'query.setQueryType (" search ")' вместо 'query.set (" qt "," search ")'. – javanna

+0

Спасибо Jayendra. Я попытался создать новый обработчик запросов, как вы предлагаете, но код всегда, кажется, использует существующий обработчик запросов (по умолчанию «/ select», который был в примере файла конфигурации). Я смог заставить это работать, изменив существующий обработчик запросов. Но это означает, что я не могу выбирать между типами запросов. – Joe

+0

А, наконец, получил эту работу. Вышеприведенное решение более или менее корректно. После погружения в источник я понял, что мне нужно установить имя requestHandler для «/ search» и query.set («qt», «/ search»). QueryRequest явно ищет «/», иначе он по умолчанию использует «/ select». – Joe

3

Вы должны уметь это программировать.

Если у вас есть обработчик, определенный:

<requestHandler name="dismax_nl" class="solr.SearchHandler"> <lst name="defaults"> <str name="defType">dismax</str> 

и следующий код

solrQuery.put("defType", "dismax"); 
solrQuery.put("qf", "comments_nl^20 id^1 name_nl^1 description_nl^0.2 url_nl^0.5 text^0.1"); 

Держите простой запрос. qf определяет (взвешенные) поля. Вы также должны установить qt = dismax_nl вместо deftype = dismax в приведенном выше примере (что может быть лучше, но тот, который я показал, это то, что я знаю)

Смежные вопросы