Обработчик запросов Dismax

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

<!-- 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, это был бы желаемый эффект.

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


person user592419    schedule 15.09.2011    source источник
comment
Почему qf double_score? Что за поле есть у Дэна и Джо Смита?   -  person Mauricio Scheffer    schedule 15.09.2011
comment
double_score - это то, что я хочу определить в порядке. Поле с этими двумя другими - это имя (поле поиска по умолчанию)   -  person user592419    schedule 15.09.2011


Ответы (2)


Я думаю, вы слишком усложняете ... попробуйте следующее:

<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>
person Mauricio Scheffer    schedule 15.09.2011

Пытаться

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

что значит:

  1. Я ищу Джо Смита
  2. Я ищу в полях двойная оценка и описание

Где описание - это поле, в котором вы храните текст для поиска.

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

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

В текстовом типе данных используются методы фильтрации (выделение границ, токенизация), а в строковом типе данных он обрабатывается как таковой. См. Как определить тип поля для индексации SOLR?

person Jesvin Jose    schedule 15.09.2011
comment
Итак, я попытался сделать это (для описания уже был задан текст) и обнаружил, что на самом деле это не сработало. Я должен был ввести полное название поиска, прежде чем любой поиск будет успешным. Это означает, что Дэн возвращает только Данса, а не Даниэль. (Я должен был указать Дэна * в исходном посте, приношу свои извинения). Затем я попытался использовать edismax, и это сработало, за исключением поля qf. Что вы порекомендуете сделать здесь, пойти с edismax и выяснить, что там делать с qf, или реализовать что-то еще, относящееся к DISMax? Еще раз спасибо. - person user592419; 16.09.2011
comment
Это ошибочно, когда поиск Дэн не возвращает Дэна Брауна, не знаю о Дэниелсе. Проверьте stackoverflow.com/questions/3208311/ тоже (я сам это проверил). И ответ Маурисио имеет смысл, установив bf (поле ускорения). - person Jesvin Jose; 16.09.2011