2011-09-15 6 views
0

Я использую solr для поиска набора данных по имени (например, «Dan» или «Joe Smith»). Я хотел бы вернуть результаты, указанные в запросе (изменить: с подстановочным знаком в конце) в порядке, указанном другим индексированным полем double_score (например, 10.0 или 72.3). В настоящее время у меня есть следующее, которое не работает:Обработчик запроса Dismax

<!-- Note that the default search is on the field name --> 
<requestHandler name="/scoresearch" class="solr.SearchHandler" default="true"> 
    <!-- <lst name="invariants"> 
      <str name="q">{!boost b=sum(double_score) defType=dismax v=$qq}</str> 
     </lst> --> 
     <lst name="defaults"> 
      <str name="defType">dismax</str>  
      <str name="echoParams">explicit</str> 
     <int name="rows">10</int> 
    <!-- <str name="qq"></str> --> 
     <str name="qf">double_score</str> 
     <str name="debug">true</str> 
     <str name="q.alt">*:*</str> 
    </lst> 
</requestHandler> 

Если я удалю комментарии, то поиск действительно работает s.t. любой запрос, который я делаю, заменяется на q.alt, а затем увеличивается на значение double_score. Если бы это не заменило q.alt, это было бы желательным эффектом.

Также обратите внимание, что пока я еще не углубился в более интересные возможности, такие как токенизация имен, я действительно планирую это сделать. Поэтому любое возможное предложение/решение не должно исключать этого.

+0

Почему QF 'double_score'? В какой области есть «Дэн» и «Джо Смит»? –

+0

double_score - это то, что я хочу определить. Поле с этими двумя другими - это «имя» (поле поиска по умолчанию) – user592419

ответ

1

Я думаю, что вы усложнять его ... попробуйте это:

<lst name="defaults"> 
    <str name="defType">edismax</str> 
    <str name="qf">name</str> 
    <str name="q.alt">*:*</str> 
    <str name="bf">double_score</str> 
</lst> 
+0

Спасибо. Это работало довольно хорошо. – user592419

0

Попробуйте

http://localhost:8983/solr/select/?q=Joe Smith&qf=double_score^1.2 description 

, что означает:

  1. Ищу Джо Смита
  2. Я ищу поля двойного счет и описания

Где описание будет полем, где вы храните текст, который хотите найти.

Убедитесь описание имеет тип данных текст с

stored="true" (in case you want to return snippets) 
indexed="true" (so it is searchable) 

Текст типа данных использует методы фильтрации (связанный, лексического), в то время как строка тип данных обрабатывает его как таковой. См How to determine field-type for SOLR indexing?

+0

Итак, я попытался сделать это (уже было задано для текста) и обнаружил, что он на самом деле не работает. Я должен был указать полное имя поиска, прежде чем любой поиск будет успешным. Это означает, что что-то вроде «Дэн» возвращает только «Дэн» и «Даниэллс». (Я должен был указать «Дэн *» в исходном посте, мои извинения). Поэтому я попытался использовать edismax, и это действительно сработало, за исключением поля qf. Что вы рекомендуете делать здесь, отправляясь с edismax и выясняя, что делать там с qf или внедрять что-то еще, что важно для разврата? Еще раз спасибо. – user592419

+0

Неисправность при поиске «Дэн» не возвращает «Дэн Браун», не знаю о «Даниэллсе». Проверьте http://stackoverflow.com/questions/3208311/wildcard-searches-using-dismax-handler тоже (я сам это проверил). И ответ Маурисио имеет смысл, устанавливая bf (поле boost). – aitchnyu

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

  • Нет связанных вопросов^_^