Нечеткий поиск представляет собой набор техник, позволяющих интеллектуально сопоставлять поисковые запросы и контент. По сути, речь идет о нахождении релевантных результатов даже тогда, когда поисковые термины не совпадают полностью. Хотя чаще всего он используется для обработки опечаток и ошибок, эта технология выходит далеко за рамки простого исправления ошибок — она может интерпретировать неоднозначные запросы, понимать неформальный язык, обрабатывать частичные слова и определять связанные концепции, которые могут не иметь точной терминологии.
Техники нечеткого сопоставления, которые мы рассмотрим в этой статье, позволяют Manticore Search реализовать интеллектуальные стратегии сопоставления, обеспечивая всестороннее извлечение результатов. В этом контексте релевантность становится тонким искусством, а не жесткой наукой.
Понимание релевантности поиска
Основа поиска заключается в точном текстовом сопоставлении, где запросы сравниваются посимвольно с проиндексированным контентом. Например, поиск по запросу «laptop» вернет только записи, содержащие именно это слово, а не связанные термины, такие как «notebook» или «computer».
Точное сопоставление хорошо решает многие задачи. При хорошо структурированных данных поиск по запросу «laptop» выявит все релевантные записи, содержащие этот термин, будь то в заголовках, описаниях или категориях. При улучшенном моделировании данных поиск по запросу «laptop» может даже возвращать связанные элементы, такие как аксессуары для ноутбуков или сервисы для компьютеров.
Однако что происходит, когда точный термин отсутствует в записях, несмотря на релевантность контента? Здесь могут помочь синонимы. Но что, если пользователь ищет «notebook», но вводит «notebok»? Без нечеткого сопоставления поиск не вернет никаких результатов.
Нечеткое сопоставление повышает релевантность поиска, делая процесс более естественным и снисходительным. При эффективной реализации оно бесшовно включает связанные элементы, которые иначе могли бы быть упущены. Как при сборке пазла, нечеткий поиск собирает похожие кусочки, помогая пользователям найти именно то, что им нужно. Более того, поскольку пользователи часто уточняют свои запросы в процессе поиска, нечеткое сопоставление предлагает варианты на основе сходства, подобно дегустации блюд перед выбором идеального ужина.
Современные поисковые движки, такие как Manticore Search, Elasticsearch и Algolia, предлагают продвинутые возможности нечеткого сопоставления, каждый со своим уникальным подходом. Давайте подробно рассмотрим реализацию в Manticore.
Понимание нечеткого поиска
Что такое нечеткий поиск?
Нечеткий поиск позволяет сопоставлять слова, которые не являются идентичными. Он обрабатывает различные типы вариаций ввода, от простых опечаток до сложных ошибок в написании. Эта технология учитывает спешку при наборе, проблемы ввода у мобильных пользователей и сложности орфографии в разных языках. Она особенно полезна для сопоставления пользовательского контента, который часто содержит вариации в написании и терминологии. Технология также может включать возможности фонетического сопоставления.
Альтернативные термины включают приближенное сопоставление строк или нечеткое сопоставление строк.
Примеры:
- Введите «helo», найдите записи с «hello»
- Введите «help», найдите записи с help и hello
Смотрите дополнительные примеры и то, как это реализовано в Manticore ниже.
Что такое нечеткое сопоставление?
Нечеткое сопоставление расширяет концепцию, включая поиск информации на основе различных типов сходств. Мы сосредоточимся на языковых сходствах, включая синонимы, грамматические вариации (множественное число, формы глаголов и т.д.), словарные подходы и другие лингвистические или NLP‑техники. Мы также рассмотрим типичные возможности поисковых движков, такие как частичное сопоставление слов, сопоставление фраз и возможности фильтрации.
Примеры:
- Введите «pants», найдите pants, trousers, slacks (синонимы)
- Введите «be», найдите Beatles, bees (поиск по префиксу)
Смотрите дополнительные примеры и то, как это реализовано в Manticore ниже.
Другие применения нечеткой логики
Нечеткая логика помогает классифицировать элементы на основе общих характеристик. Например, смартфон, планшет и ноутбук обладают свойством быть портативными вычислительными устройствами, но смартфоны и планшеты более тесно связаны из‑за своих сенсорных интерфейсов и мобильных операционных систем.
Нечеткая логика строит отношения, основываясь на относительном сходстве, а не на бинарных истинных/ложных условиях (объекты сопоставляются по признаку «портативность», а не по идентичному весу).
Реализация нечеткого поиска с использованием расстояния Левенштейна в Manticore
Допуск ошибок позволяет пользователям делать опечатки при вводе и всё равно находить релевантные результаты. Manticore реализует это с помощью алгоритма расстояния Левенштейна.
Что считается опечаткой?
- Отсутствующие символы: "laptp" → "laptop"
- Дополнительные символы: "laptopp" → "laptop"
- Переставленные символы: "lpatop" → "laptop"
- Неправильные символы: "laptip" → "laptop"
Алгоритм расстояния Левенштейна
Допуск ошибок Manticore использует сопоставление на основе расстояния, реализуя алгоритм расстояния Левенштейна. Расстояние измеряет различие между введённым словом и его точным совпадением в индексе. Конкретно, оно представляет собой минимальное ...
Например, если движок получает «laptp», он может сопоставить его с «laptop» (расстояние = 1 / один отсутствующий символ) или с «laptps» (расстояние = 2 / два ...
Distance задает порог допуска. В Manticore вы можете настроить это с помощью параметра distance, по умолчанию равного 2: слова с расстоянием 3 и более различий исключаются из результатов.
Примеры нечеткого поиска с использованием расстояния Левенштейна
Ниже приведены примеры того, как Manticore вычисляет операции, необходимые для совпадения с "iphone":
- iphone - 0 различий (точное совпадение)
- iphon - 1 различие (удаление: e)
- iphonee - 1 различие (добавление: e)
- iphne - 1 различие (удаление: o)
- iphonne - 1 различие (добавление: n)
- iphne - 2 различия (удаление: o, удаление: e)
- iphonne - 2 различия (добавление: n, добавление: e)
- iphne - 3 различия (удаление: o, удаление: e, удаление: n) - превышает порог по умолчанию
Ранжирование результатов и толерантность к ошибкам
Что касается релевантности: все нечеткие совпадения, основанные на орфографических различиях, считаются менее релевантными, чем точные совпадения. Поэтому записи с расстоянием 0 – точные совпадения – ранжируются выше, чем записи с ошибками. Аналогично, записи с 1 ошибкой ранжируются выше, чем записи с 2 ошибками.
Нечеткий поиск с учетом раскладки клавиатуры
Отличительной особенностью нечеткого поиска Manticore является учет раскладки клавиатуры. Эта функция понимает, что пользователи могут вводить текст с различными раскладками, что приводит к определенным типам ошибок.
Например, если кто‑то случайно вводит текст с активной неправильной раскладкой клавиатуры, Manticore может интерпретировать запрос, учитывая физические позиции клавиш в разных раскладках. Manticore поддерживает 17 различных раскладок клавиатуры, включая QWERTY, AZERTY, QWERTZ и другие, что делает его высоко адаптируемым для международных приложений.
Например, пользователь вводит "yucker" на американской клавиатуре, но система интерпретирует это как немецкую раскладку QWERTZ. Manticore распознает несоответствие и правильно преобразует ввод в "zucker" (немецкое слово для "сахар"). Без учета раскладки поиск бы не сработал из‑за замены клавиш Y/Z. Manticore гарантирует, что пользователи находят результаты, даже если их раскладка клавиатуры настроена неверно.
Настройка нечеткого поиска в Manticore
Реализация нечеткого поиска в Manticore проста, с поддержкой как SQL, так и JSON API.
Использование синтаксиса SQL
SELECT * FROM mytable
WHERE MATCH('someting')
OPTION fuzzy=1, layouts='us,ua', distance=2;
В этом примере:
fuzzy=1включает нечеткое сопоставлениеlayouts='us,ua'указывает, какие раскладки клавиатуры учитывать (US и украинская)distance=2задает максимальное расстояние Левенштейна, равное 2
Использование JSON API
POST /search
{
"table": "test",
"query": {
"bool": {
"must": [
{
"match": {
"*": "ghbdtn"
}
}
]
}
},
"options": {
"fuzzy": true,
"layouts": ["us", "ru"],
"distance": 2
}
}
Этот пример JSON демонстрирует, как Manticore обрабатывает опечатки при переключении раскладки — "ghbdtn", набранный на американской клавиатуре, на самом деле будет "привет" ("hello" по‑русски), если набрать его на русской клавиатуре.
Дополнительные техники нечеткого сопоставления
Частичное совпадение слов с поиском по префиксу
Как и другие продвинутые поисковые движки, Manticore поддерживает сопоставление по префиксу для поиска в реальном времени. Это позволяет движку находить записи на основе частичных слов.
Например, записи, содержащие "apricot", возвращаются сразу, как только пользователь вводит "a", "ap", "apr". Нет необходимости ждать полного совпадения слова перед отображением результатов.
Синонимы
Синонимы указывают движку, какие слова и выражения считать эквивалентными — например, pants = trousers. Таким образом, поиск по запросу "trousers" вернет "trousers" и "pants", а поиск по запросу "pants" также вернет "trousers" и "pants".
Хотя общее расширение синонимов на основе тезауруса может быть слишком широким, Manticore позволяет определять конкретные, контекстно релевантные синонимы для вашего набора данных с помощью wordforms .
Оптимизация нечеткого поиска для получения лучших результатов
Несмотря на свою мощность, внедрение нечеткого поиска требует тщательного рассмотрения. Он может возвращать слишком много результатов или неожиданные совпадения, которые могут влиять на воспринимаемую релевантность.
Поисковый движок должен управлять этим расширением информации. Например, приоритизируя точные совпадения, гарантируя их появление вверху результатов, выше нечетких совпадений:
- При опечатках точные совпадения считаются более релевантными, чем нечеткие (даже если ошибка очевидна пользователю).
- При использовании синонимов точные совпадения более релевантны, чем совпадения по синонимам (даже если запрос имеет несколько значений и синоним был бы более уместным).
Manticore управляет этим, отображая нечеткие совпадения после точных. Это часть всестороннего подхода Manticore к обработке вариантов поиска.
Существует также множество UI‑шаблонов для управления этим. Например, поисковые системы часто добавляют "предлагаемые правописания" сразу под строкой поиска. Или они предлагают функции автодополнения или подсказок запросов, где пользователю предлагаются варианты запросов (и категории) в выпадающем списке во время ввода, из которых он может выбрать свой запрос. Manticore предоставляет всестороннюю поддержку этих функций, как описано в нашем Autocomplete API .
Однако идеальное решение находится «под поверхностью», полностью прозрачно для пользователя, когда поисковый движок возвращает результаты, создающие у пользователя ощущение, что отображаемые элементы являются лучшими и наиболее релевантными — даже если они не точно соответствуют тексту запроса.
Практические применения
Рассмотрим реальные сценарии, где нечеткий поиск Manticore проявляет себя наилучшим образом:
Электронная коммерция
В электронной коммерции пользователи часто ищут товары с сложными названиями или техническими характеристиками, которые они могут написать с ошибками. Нечеткий поиск гарантирует, что они всё равно найдут то, что ищут:
SELECT * FROM products
WHERE MATCH('sansung glaxy')
OPTION fuzzy=1, distance=2;
Этот запрос успешно найдет продукты, содержащие "Samsung Galaxy", несмотря на опечатки.
Управление контентом
Для сайтов с большим объемом контента нечеткий поиск помогает пользователям находить релевантные статьи, даже если они неправильно помнят термины или названия:
SELECT * FROM articles
WHERE MATCH('artifical inteligence')
OPTION fuzzy=1;
Это найдет статьи о "artificial intelligence", несмотря на орфографические ошибки.
Международные веб‑сайты
Для сайтов, обслуживающих многоязычную аудиторию, учет раскладки клавиатуры особенно ценен:
SELECT * FROM content
WHERE MATCH('ghdbtn')
OPTION fuzzy=1, layouts='us,ru';
Это найдет контент с "привет" (русское слово для "hello"), когда пользователь случайно вводит текст с неправильной раскладкой клавиатуры.
Заключение
Не́четкий поиск больше не является опциональным - он необходим для современных реализаций поиска. Manticore Search предоставляет сложные, но доступные возможности нечеткого поиска, которые могут значительно улучшить пользовательский опыт, учитывая естественные вариации в запросах, созданных людьми.
Используя алгоритм расстояния Левенштейна от Manticore и уникальное распознавание раскладки клавиатуры, вы можете создавать поисковые интерфейсы, которые кажутся почти волшебными для пользователей. Они найдут то, что ищут, даже если запрос не полностью соответствует.
Независимо от того, создаете ли вы платформу электронной коммерции, систему управления контентом или любое приложение с функцией поиска, внедрение нечеткого поиска с Manticore может привести к повышению удовлетворенности пользователей, лучшему вовлечению и, в конечном итоге, к росту коэффициента конверсии.
