Solr - Повышение результата, если запрос найден в специальном поле

Мне интересно, возможно ли в Solr 3.4 повысить результат поиска, если запрос найден в специальном поле без использования синтаксиса "fieldname:query".

Позволь мне объяснить:

У меня есть несколько полей в моем индексе. Один из них называется "аббревиатура" и заполнен текстом, таким как AVZ, JSP, DECT, ...

Чтобы иметь возможность находить результаты при поиске только слова "AVZ", я добавил

<copyField source="abbreviation" dest="text"/>

в моем schema.xml. Текст поля - это мой defaultSearchField.

Это не лучшее решение на мой взгляд. Поэтому я пытаюсь выяснить, можно ли искать "AVZ" во всех полях, и если в аббревиатуре полей указана строка "Строка", запись результата должна быть увеличена (при увеличении балла), чтобы она отображалась в Первая запись в списке результатов. Было бы так же, как использовать сокращение:AVZ AVZ в качестве запроса.

Другая возможность, о которой я могу подумать, - проанализировать запрос. И если найдена подстрока типа "AVZ", к запросу будет добавлено сокращение: AVZ. Но в этом случае я должен быть в состоянии выяснить, какие сокращения индексируются. Можно ли извлечь все возможные члены поля из индекса Solr, используя SolrJ?

С наилучшими пожеланиями Тобиас

2 ответа

Решение

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

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

Это использует анализатор запросов dismax. Вы также можете использовать Edismax.
Это повысит результаты, и запрос будет простым, как q=AVZ.

Если только через URL, вы можете увеличить соответствие в определенном поле, как упомянуто @ ссылка

например

q=abbreviation:AVZ^2 text:AVZ

Это повысит результаты с совпадением сокращений, что приведет к тому, что документы появятся сверху.

Невозможно получить все результаты с dismax, используя *:* запрос.
Тем не менее, для всех документов просто не передайте q параметров. q.alt=*:* вернет все документы.

Иначе обновите defType в edismax,

<requestHandler name="search" class="solr.SearchHandler" default="true">
 <lst name="defaults">
   <str name="echoParams">explicit</str>
   <str name="defType">edismax</str>
   <str name="qf">
      abbreviation^2 text
   </str>
   <str name="q.alt">*:*</str>
   <str name="rows">10</str>
   <str name="fl">*,score</str>
 </lst>
</requestHandler>

Apache Solr 6.4.2:

Усиление точного поиска по фразе не работает:Solrconfig.xml:

явный

  <int name="rows">10</int>
  <str name="defType">edismax</str>

  <str name="qf">names^50</str>



  <!-- <str name="df">text</str> -->
</lst>

Solr запрос используется для проверки: q=(names:alex%20pandian)&wt=json&debugQuery=on

В режиме отладки показывает

"parsedquery_toString":"+((имена: alex ((имена:pandian)^50.0))) ()"

Это повышает термины только со второго слова. В этом случае только Pandian повышен, но Алекс нет.

Другие вопросы по тегам