Apache SOLR edisMAX, несколько ключевых слов и последовательность этих ключевых слов, дающих разные результаты - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь понять причину root проблемы с моим поисковым запросом SOLR. Ниже приведен код клиента SOLRJ.

query.setStart(0);
query.setRows(1000);
query.set("debugQuery", true);
query.set("defType", "edismax");
query.setQuery("title:business OR statistics) OR (name:business OR statistics)");           
query.add("fq", "bsuiness_id:(101 102)");
query.add("tie", "0.1");
query.set("bq","weight:[0 TO 500]^1 weight:[501 TO 1000]^3");

возвращает 200 результатов поиска

query.setStart(0);
query.setRows(1000);
query.set("debugQuery", true);
query.set("defType", "edismax");
query.setQuery("title:statistics OR business) OR (name:statistics OR business)");           
query.add("fq", "bsuiness_id:(101 102)");
query.add("tie", "0.1");
query.set("bq","weight:[0 TO 500]^1 weight:[501 TO 1000]^3");

возвращает 100 результатов поиска

Насколько я понимаю, ключевые слова "статистика бизнеса" и "статистика бизнеса" должны давать одинаковые результаты. Тем не менее, вы можете заметить выше, что они не являются.

Может кто-нибудь дать какие-нибудь указатели о том, что отсутствует?

1 Ответ

0 голосов
/ 26 апреля 2020

Два запроса не совпадают. (И вам не хватает ( в начале)

title:business OR statistics) OR (name:business OR statistics)

ищет business в поле title и statistics в поле поиска по умолчанию (так как это не кажется как у вас есть qf параметр), или business в поле name и снова, statistics в поле поиска по умолчанию.

Так действует:

title = business or name = business or statistics in default search field

Ваш второй запрос:

title:statistics OR business) OR (name:statistics OR business)

.. ищет statistics в поле title, business в поле поиска по умолчанию, statistics в поле имени или business (снова) в поле поиска по умолчанию. В действительности:

title = statistics or name = statistics or business in the default search field

.. как видите, эти два запроса не совпадают. Префикс field: действителен только для токена, который следует сразу за ним, но не для других токенов.

Используя обработчик edismax, я предлагаю вам переписать его вместо параметра qf (поля запроса ), который сообщает Solr, какие поля запрашивать. Два ваших примера можно упростить до:

q=statistics business&qf=name title

.. поиск statistics и business в двух полях, указанных в параметре qf. Вы можете использовать q.op=OR для получения совпадений, где присутствует любой из терминов (как в вашем примере), или q.op=AND для получения совпадений, где присутствуют оба.

В этом случае statistics business и business statistics так как запрос даст вам тот же результат.

Если вы хотите использовать явный синтаксис (он же синтаксис Lucene), вы можете использовать форму field:(term1 OR term2) - title:(business OR statistics) OR name:(business OR statistics) - но так как вы уже используете обработчик edismax, я рекомендую использовать встроенная поддержка более естественных запросов и использование qf для определения полей для поиска. Вы также можете использовать веса с qf, чтобы по-разному взвешивать попадания в два поля - qf=name^3 title даст в три раза больше веса любым попаданиям в поле name.

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