⚠️ Эта страница автоматически переведена, и перевод может быть несовершенным.

Fuzzy matching and 2nd pass query

Многие клиенты, которым мы помогли интегрировать поиск в их приложения , хотели, чтобы их поиск был более интеллектуальным, чем просто строгое сопоставление запроса с документами.
Существует множество способов сделать это. 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"

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

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

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

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

Многие из наших клиентов используют логику второго прохода: сначала выполняется более строгий запрос, а если ничего не найдено или возвращено недостаточно результатов, выдаётся второй, менее строгий запрос. Также может быть более сложная логика с третьим и четвертым проходами. Всё зависит от ваших требований и от того, хотите ли вы, чтобы пользователь в любом случае нашёл что‑то. Или, наоборот, вы можете позволить ему найти именно то, что точно соответствует его запросу.

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

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

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

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

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