Я настраиваю коллекцию 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_
суммой его компонентов.
Вопросы:
Это правильный способ настройки?
Если да (или если есть лучший способ), как я могу получить общую оценку запроса как сумму его двух половин? Сейчас кажется, что он использует максимальную оценку, то есть, если 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+.