Поиск Solr и оценка по всем родительским и дочерним документам - PullRequest
0 голосов
/ 29 августа 2018

Я настраиваю коллекцию Solr для поиска контактной информации. Модель данных, как и сейчас, состоит из сторон, которые имеют контактные методы. Я реализовал это, используя идею Solr о вложенных документах. (Я могу попытаться превратить его в абсолютно плоскую модель, если это лучшее решение.) Я хочу выполнить один простой запрос, набранный пользователями, для обеих сторон и их методов контакта, но только вернуть стороны.

Кажется, мне это удалось:

_query_:"{!edismax qf=p1 p2 p3 ... pn v=$TERMS}" 
_query_:"{!parent which="type:party"}{!edismax qf=m1 m2 m3 ... mn
          v=$TERMS}"

Здесь p1 ... pn - поля участника, m1 ... mn - поля метода контакта, а TERMS - запрос пользователя, одинаковый для обоих. Я использую параметр sow, чтобы разделить TERMS на токены, и tie=1.0, чтобы сделать общий балл одного _query_ суммой его компонентов.

Вопросы:

  1. Это правильный способ настройки?

  2. Если да (или если есть лучший способ), как я могу получить общую оценку запроса как сумму его двух половин? Сейчас кажется, что он использует максимальную оценку, то есть, если TERMS равны P M, P соответствует одному из полей p, а M соответствует одному из M, окончательная оценка основывается либо на одном или по другому; другой вычисляется, но обнуляется.

Вот соответствующий фрагмент из объяснения:

"document-123":{
   "match":true, "value":9.41881, "description":"sum of:",
   "details":[
     {"match":true, "value":9.41881, ... },
     {"match":true, "value":0.0,
      "description":"Score based on 1 child docs ..., best match:",
      "details":[{"match":true, "value":11.7847, 
        "description":"sum of:", "details":[ ... ]}]}]},

т.е. родитель соответствует 9+, ребенок - 11+, но затем это дочернее совпадение игнорируется, и окончательный результат остается 9+.

1 Ответ

0 голосов
/ 16 марта 2019

Для «родительского» запроса есть параметр «оценка», который позволит вам ссылаться на оценки в подчиненном запросе (ваш запрос edismax).

Итак, в вашем родительском запросе добавьте параметр Score, и в вашем edismax вы можете поработать с некоторыми улучшениями в вашем параметре qf, например:

_query_:"{!parent which="type:party" score=total}{!edismax qf=m1^0 m2^5 m3^1 ... mn
          v=$TERMS}"

Вы можете использовать различные методы агрегации, такие как max | min | total | avg для «счета».

рефов: https://lucene.apache.org/solr/guide/6_6/other-parsers.html#OtherParsers-Scoring https://lucene.apache.org/solr/guide/6_6/the-extended-dismax-query-parser.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...