Elasticsearch: Повышение приоритета терминов

В этой статье объясняется, как повысить приоритет терминов и пунктов запроса при поиске в Elasticsearch.

Elasticsearch

При поиске по нескольким терминам иногда полезно иметь возможность присвоить определенным терминам более высокий или более низкий приоритет. Elasticsearch предоставляет возможность сделать это, указав положительное число с плавающей точкой. Ниже приведен пример запроса.

Как вы можете видеть в этом запросе, я увеличиваю термин "спагетти" с помощью оператора boost, за которым следует число с плавающей точкой. По умолчанию значение boost равно 1, поэтому любое число больше единицы увеличивает важность термина, а любое значение между 0 и 1 уменьшает важность. В данном случае я увеличиваю важность термина "спагетти", поэтому документы, содержащие этот термин в поле имени, получат повышение оценки релевантности.

Можно также повысить значимость фразы. Поэтому давайте изменим запрос, чтобы искать не два термина, а фразу "макароны спагетти".

Как видите, увеличение просто указано в конце фразы, после последней кавычки. Документы, содержащие эту фразу в поле name, будут иметь повышенный балл релевантности. Конечно, это имеет больше смысла, если вы будете искать по большему количеству полей или применять другие ограничения к документам, но цель этого запроса - просто показать вам, как повысить релевантность фразы.

Теперь, когда вы знаете, как усиливать термины и фразы с помощью поиска по строке запроса, давайте посмотрим, как это сделать с помощью DSL запроса. Я просто скопирую пример запроса, потому что вы все его уже видели. Запрос представляет собой bool-запрос, который требует, чтобы документы содержали термин pasta, и увеличивает документы, содержащие термины spaghetti и noodle.

На данный момент запрос не содержит усилений для каких-либо терминов. В объект поля, вложенный в объект запроса (в данном случае запрос на соответствие), можно добавить свойство boost с положительным числом с плавающей точкой в качестве значения. Я просто добавлю его в запрос.

По умолчанию, если удовлетворяются запросы на совпадение в пункте should запроса bool, то данный документ получит более высокий балл релевантности. Однако в этом запросе я явно указываю значения boost для каждого запроса соответствия, то есть я указываю, насколько каждый из запросов увеличит оценку релевантности, если он будет удовлетворен. Обратите внимание, что величина повышения не является линейной, то есть повышение на 2 не приведет к тому, что оценка документа будет в два раза выше. Внутренняя работа над тем, как рассчитывается оценка и как на нее влияет значение boost, выходит за рамки этой статьи, но просто знайте, что чем выше значение boost, тем выше будет оценка. В данном примере я указал, что термин "спагетти" важнее термина "лапша", поэтому если я выполню этот запрос и просмотрю результат, то вы увидите, что все совпадения содержат термин "макароны", а совпадения, содержащие термин "спагетти", имеют более высокий балл. После этих документов мы находим документ, содержащий термин "лапша". Это в точности соответствует нашим бустам, которые указывают, что спагетти важнее, чем лапша.

Аналогичным образом можно добавлять бусты и для других типов запросов, например, для запроса по фразе (match_phrase). Как вы видели, бустинг очень полезен для указания того, какие термины, фразы или запросы являются более или менее важными, что позволяет легко управлять приоритетами результатов поиска. Существуют и другие способы, если вам нужен полный контроль, но это самый простой способ, и на данный момент это все, о чем вам нужно знать.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий