Нечеткое соответствие и второй проход запроса

Многие клиенты, которым мы помогли с интеграцией поиска в их приложения , хотели, чтобы их поиск был более интеллектуальным, чем просто строгое соответствие запроса документам.
Существует множество способов сделать это. Manticore Search делает это очень просто, так как нечеткое соответствие включено из коробки. Оно состоит из трех основных компонентов:

1. Оператор кворума:

"computing and technology news"/2Это означает, что как минимум два слова из фразы должны совпадать, т.е. этот запрос найдет тексты, содержащие как “computing news”, так и “technology news”.

2. Оператор близости:

"computing news"~3 Это означает, что между словами из запроса может быть менее N несовпадающих слов. Вот несколько примеров, если текст — это a b c d e f g h:

  • "a h"~7 найдет, что так как b c d e f h — это 6 несовпадающих слов, и это меньше 7
    однако "a h"~6 не найдет текст
  • "a d h"~6 найдет, что
  • "a d h"~5 не найдет

3. Оператор NEAR

computing NEAR/6 "technology news"

Вышеуказанный оператор близости работает только с наборами ключевых слов. NEAR более универсален и может принимать произвольные подвыражения в качестве своих двух аргументов, соответствуя документу, когда оба подвыражения находятся в пределах N слов друг от друга, независимо от порядка.

Вышеуказанный запрос будет:

  • соответствовать документу, содержащему computing is a popular topic in technology news, так как 1-е слово и фраза находятся в пределах 6 слов
  • но не будет соответствовать computing nowadays is a popular topic in* technology news, так как разрыв уже составляет 6 и превышает лимит, установленный в операторе NEAR.

Логика второго прохода

Многие из наших клиентов используют логику второго прохода: это когда вы сначала выполняете более строгий запрос, а затем, если ничего не найдено или недостаточно результатов, выдает второй менее строгий запрос. Также может быть более сложная логика с 3-м и 4-м проходами. Это зависит от ваших требований и хотите ли вы, чтобы ваш пользователь в любом случае нашел что-то. Или, наоборот, вы можете позволить им найти что-то, что точно соответствует его запросу.

Иногда имеет смысл сделать это наоборот и сделать запрос более строгим. Например, если ваша стратегия соответствия по умолчанию — «любое слово должно совпадать», и ваше приложение не имеет расширенного синтаксиса, чтобы позволить пользователям самим указывать лучший запрос, имеет смысл сначала попробовать стратегию «все слова должны совпадать» или даже «фраза должна совпадать». Это может значительно повысить качество поиска.

В некоторых приложениях имеет смысл параллелизовать запросы 1-го/2-го проходов и так далее. Это можно легко сделать с помощью много запросов Manticore Search. Логика здесь заключается в том, чтобы выполнить запрос второго прохода заранее, и если ничего не найдено по запросу первого прохода, результаты будут готовы, и поскольку запросы выполнялись одновременно, это улучшает производительность. Однако это зависит от множества факторов. Вам следует быть осторожным, так как это может иногда снизить производительность. Эти факторы:

  • Какое оборудование вы используете? Если оно недостаточно мощное, чтобы обрабатывать два запроса одновременно, или время отклика близко к тому, что ответ вдвое больше, чем у одного запроса, имеет мало смысла использовать эту технику.
  • Какова ваша нагрузка? Если ваш экземпляр/сервер Manticore Search уже сильно загружен, вы получите худшее время отклика.
  • Каковы ваши статистические данные? Если для 99% запросов первый проход возвращает результаты, нет смысла выполнять запрос второго прохода вместе с первым, это просто будет пустая трата ресурсов.

Установить Manticore Search

Установить Manticore Search