Query Field Boosting проблема в solr, когда повышенный термин присутствует в более чем 1 поле - PullRequest
0 голосов
/ 25 марта 2019

У меня 4 поля в solr.НапримерField1, Field2, Field3 and Field4.

Моя последовательность буста похожа на field1^10, field2^8, field3^7 field4^6.

Теперь, если я ищу маркетинг по ключевым словам, скажем q=(Field1:("marketing")^10 OR Field2:("marketing")^8 OR Field3:("marketing")^7 OR Field4:("marketing")^6).

Требование : Теперь, согласно требованию, должен присутствовать маркетинговый подарок в field1, и поэтому он работает нормально.

Проблема : Но есть одна запись, где маркетинг появляется в Field3 и Field4, и он появляется на втором месте в результате, в то время как запись, содержащая маркетинг в Field2, появляется на третьем месте, чтовероятно из-за механизма подсчета очков.

Решение, которое мне нужно : я хочу показать записи в порядке усиления, примененного к этому полю, независимо от того, найдено ли оно в нескольких полях, т.е. запись, имеющая маркетинг в поле2, всегда должна появляться на втором местев результате.

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Ответ, данный @MatsLindh в комментариях, является правильным решением:

Однако вы можете попытаться увеличить свои повышения, чтобы иметь гораздо большую разницу между различными уровнями - field1^100000, field2^10000, field3^1000 field4^100 - таким образомПри одинаковом содержании два более поздних поля не будут увеличиваться в большей степени, чем предыдущие.

Примечание : Помните, что на результаты будет влиять больше, чем просто повышение (например, количество событий и т. Д.).

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

Я могу придумать два способа решения этой проблемы:

  1. Использовать qf параметр запроса - если вы передаете поля и ботинки в параметре qf вместо qтаким образом, ваш запрос выглядит примерно так: q=marketing&qf="field1^10 field2^8, field3^7 field4^6", тогда анализируемый запрос будет выглядеть примерно так: max(field1:marketing^10,field2:marketing^8,field3:marketing^7 OR , field4:marketing^6), поэтому не имеет значения, во сколько полей они появятся, он будет принимать только максимум.

  2. Измените бусты, чтобы каждое значение буста было больше, чем сумма буста перед ним.Например: field4^1, field3^2, field2^4, field1^8, таким образом, никакая комбинация полей не может повлиять на порядок.

...