Сортировать документы по порядку слов в запросе - PullRequest
0 голосов
/ 21 октября 2019

подскажите, как отсортировать результаты документов в Solr по порядку слов в запросе?

Например, если я введу для запроса 2 слова milk и chocolate Я хочу повысить документыкоторый содержит эти слова в том же порядке.

В моем запросе: http://localhost:8983/solr/product/select?defType=edismax&fl=*%2C%20score&q.op=AND&q=chocolate+milk&qf=title_token%5E10

вы можете видеть, что у меня есть запрос chocolate milk, и результаты этого запроса:

{
  id: 3346664,
  title: "Milk with chocolate",
  _version_: 1648030883251224600,
  score: 79.53341
},
{
  id: 8754567,
  title: "Chocolate of Milk",
  _version_: 1648030883402219500,
  score: 79.53341
},
{
  id: 345428,
  title: "Delicious Thins Milk Chocolate",
  _version_: 1648030884582916000,
  score: 74.86635
}

Как вы можете видеть мойпервые 2 документа имеют тот же score, но первый - это документ, в котором порядок совпадений слов не совпадает с порядком слов в моем запросе. Можете ли вы сказать мне, как повысить документы, которые соответствуют порядку слов запроса? Спасибо.

Мое поле заголовка заголовка имеет следующую конфигурацию:

<fieldType name="text_token" class="solr.TextField">
    <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.WordDelimiterFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
        <filter class="solr.TrimFilterFactory"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.WordDelimiterFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
        <filter class="solr.TrimFilterFactory"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    </analyzer>
</fieldType>

1 Ответ

0 голосов
/ 22 октября 2019

Вы можете использовать параметры pf2 и pf3 для парсера запросов edismax:

Параметр pf2

Многозначный список полейс дополнительными весами, основанными на парах словаря.

Параметр pf3

Многозначный список полей с дополнительными весами, основанный на триплетах слова. Аналогично pf, за исключением того, что вместо построения фразы для поля из всех слов на входе он создает набор фраз для каждого поля из каждого триплета слова shingle.

Галькаэто два слова в сочетании, то есть "Шоколадное молоко". Вы также хотите добавить стоп-фильтр, чтобы of удалялся из потока токенов.

pf2=title^5

.. будет применять 5-кратное усиление для тех, где слова из вашего запроса появляются после друг друга.

Вы также можете добавить явный фильтр шингла, который объединяет наборы токенов при индексации, а затем применить усиление к этому полю.

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