Я создал эластичный индекс документов, имеющих поле заголовка и текстовое поле.Учитывая запрос, желаемое поведение для моего поиска состоит в том, что он first проверяет поле заголовка и, если есть какие-либо документы, где заголовок "хорошо" соответствует запросу,тогда эти документы должны быть на первом месте.Только после хороших совпадений заголовков должны быть возвращены документы с хорошим совпадением текста.
Под «хорошим совпадением заголовков» я подразумеваю что-то вроде «запроса близко к некоторому подмножеству заголовка, где закрытие означаетРасстояние Левинштейна меньше некоторого заданного числа ».Это пороговое условие.Таким образом, либо заголовок является «хорошим» соответствием, и должен иметь высокий рейтинг, либо нет, и не должен получать никакой выгоды за получение «некоторого» соответствия с запросом.Результат является двоичным.
Таким образом, если есть запрос «Как работать в саду, как лучший», то документ с заголовком «Сад как лучший» должен быть ранжирован первым, за которым следуют документы, которые в своем запросе хорошо соответствуют запросу."текстовое поле.Документ с заголовком «Бюджетное садоводство» не должен получать бонусы за то, что в заголовке указано «Садоводство», потому что это недостаточно хороший матч.
Вот моя попытка.Это использует библиотеку Pythonastic_dsl.Но эквивалент JSON должен быть очевиден.
s = Search()
initiated = s.query(
"multi_match",
query=query,
fields=[
'title^280',
'text^1'],
type='best_fields',
fuzziness='AUTO')
Как вы можете видеть, я провел многократное совпадение, в котором поле "title" придало гораздо большую важность.Я также учел некоторую нечеткость в том, что не знал точного написания слов в названии.Индекс также остановлен.Этот подход был в основном успешным, но у меня было два нежелательных поведения:
- Документы, заголовки которых имеют что-то общее с запросом, выглядят очень высокими.Например, вышеприведенный запрос будет сопоставлять документ с заголовком «разбивка бюджета» выше, чем документ с намного лучшим соответствием текстового поля.Это потому, что нет порога.
- Документы, которые имеют очень хорошее совпадение тела, по-прежнему отображаются выше, чем документы, заголовок которых буквально является точной строкой запроса.
Как я могу адаптировать свой запрос для получения желаемого поведения?Спасибо.