Solr - Повышение результата, если запрос найден в специальном поле - PullRequest
0 голосов
/ 02 ноября 2011

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

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

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

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

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

в моем schema.xml. Поле text - это мой defaultSearchField.

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

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

С наилучшими пожеланиями Tobias

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

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

<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>
0 голосов
/ 11 апреля 2017

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": "+ ((names: alex ((names: pandian) ^ 50.0))) () "

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

...