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