Как повысить результаты, содержащие поисковую фразу в поле

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

Я новичок в Solr. Я довольно долго искал в Интернете и нашел несколько связанных вопросов, например:

Использовать запрос функции для повышения оценки в Solr

запросы SolrNet с функциями повышения

Затем я начал экспериментировать с такими запросами:

https://localhost:8898/solr/collection1/select?defType=edismax&fl=resourcename&indent=on&q=resourcename:"test"*^200,%20content:"test"*^1&qf=resourcename^200%20content^2&rows=1000&wt=json
https://localhost:8898/solr/collection1/select?bf=if(exists(resourcename),100,1)&defType=edismax&fl=resourcename&indent=on&q=resourcename:"test"*^200,%20content:"test"*^1&rows=1000&wt=json
https://localhost:8898/solr/collection1/select?bf=if(exists(resourcename),100,1)&defType=edismax&fl=resourcename&indent=on&q=*:"test"*&rows=1000&wt=json
https://localhost:8898/solr/collection1/select?defType=edismax&fl=resourcename&indent=on&q=*:"test"*&qf=resourcename^200%20content^2&rows=1000&wt=json

Но, что бы я ни пытался, я получаю результаты, содержащие слово test в resourcename повсюду, а не только в верхней части результатов.

Любые идеи, что я могу упустить или сделать неправильно?


person user2173353    schedule 11.05.2017    source источник


Ответы (1)


Есть много синтаксических ошибок, я бы порекомендовал взглянуть на вики solr для парсеров запросов[1] .

В качестве предложения всегда обращайте внимание на проанализированный запрос и изучайте функции отладки для результатов поиска.

Чтобы получить поведение, о котором вы спрашиваете, я бы использовал следующие параметры запроса (цитируя из вики):

q=foo бар

qf=поле1^5 поле2^10

pf=поле1^50 поле2^20

defType=dismax

С этими параметрами анализатор запросов Dismax генерирует запрос, который выглядит примерно так:

(+(поле1:foo^5 ИЛИ поле2:foo^10) И (поле1:bar^5 ИЛИ поле2:bar^10))

Но он также генерирует другой запрос, который будет использоваться только для повышения результатов:

поле1:foo bar^50 ИЛИ поле2:foo bar^20

Таким образом, вы можете повышать результаты в соответствии с совпадениями в некоторых полях, с соответствующими повышениями, а затем также повышать фразы, появляющиеся в определенных других полях.

[1] https://cwiki.apache.org/confluence/display/solr/The+Extended+DisMax+Query+Parser

person Alessandro Benedetti    schedule 11.05.2017
comment
Спасибо. Это помогает, но по какой-то причине я не могу сделать так, чтобы все результаты, содержащие поисковый запрос/фразу, были сверху. Я пробовал очень большие веса для свойства, которое я хочу, но по какой-то причине он отказывается применять эти веса или что-то в этом роде... :^) Я пробовал назначать веса большинству полей, но все равно ничего. Я понятия не имею, что происходит... - person user2173353; 15.05.2017
comment
Хм... Кажется, я понял: он хочет, чтобы я поставил *term* вместо term*, чтобы найти поле, содержащее что-то вроде This is a term.. Не совсем понятно, почему... :^) - person user2173353; 15.05.2017
comment
Если у вас есть идеи по поводу вопроса в моем последнем комментарии, дайте мне знать. Но, в любом случае, большое спасибо за помощь. По крайней мере, теперь у меня это работает довольно хорошо. Боюсь только проблем с производительностью. :) - person user2173353; 15.05.2017
comment
Хм .... Я вижу, что по какой-то причине это пропускает некоторые результаты. Например. когда я ищу с помощью test, я получаю ожидаемые результаты (по крайней мере, я так думаю), но при поиске с помощью ppt я не получаю некоторых результатов, которые я получаю, когда не использую dismax/edismax. Не уверен, что здесь происходит... - person user2173353; 18.05.2017
comment
Я настоятельно не рекомендую использовать запросы с регулярными выражениями. Потратьте некоторое время на разработку правильной цепочки анализа, которая поможет упростить ваши запросы! - person Alessandro Benedetti; 29.06.2017