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

Освоение нечёткого поиска с Manticore Search

author image
View as markdown

Нечёткий поиск представляет собой набор техник, позволяющих интеллектуально сопоставлять поисковые запросы и контент. По сути, речь идёт о нахождении релевантных результатов даже тогда, когда поисковые термины не совпадают полностью. Хотя чаще всего он используется для обработки опечаток и ошибок, эта технология выходит далеко за рамки простого исправления ошибок — она может интерпретировать неоднозначные запросы, понимать неформальный язык, обрабатывать частичные слова и определять связанные концепции, которые могут не иметь точной терминологии.

Техники нечёткого сопоставления, которые мы рассмотрим в этой статье, позволяют 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 / один отсутствующий символ) или с «laptops» (расстояние = 2 / нужны две операции).

Distance задает порог допуска. В Manticore вы можете настроить это с помощью параметра distance, по умолчанию равного 2: слова с расстоянием 3 и более различий исключаются из результатов.

Примеры нечёткого поиска с использованием расстояния Левенштейна

Ниже приведены примеры того, как Manticore вычисляет операции, необходимые для совпадения с «iphone»:

  • iphone — 0 различий (точное совпадение)
  • iphon — 1 различие (удаление: e)
  • iphonee — 1 различие (добавление: e)
  • iphne — 1 различие (удаление: o)
  • iphonne — 1 различие (добавление: n)
  • iphn — 2 различия (удаление: o, удаление: e)
  • iphonnee — 2 различия (добавление: n, добавление: e)
  • iph — 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 полноценно поддерживает эти функции — подробнее см. документацию по 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('ghbdtn') 
OPTION fuzzy=1, layouts='us,ru';

Это найдёт контент с «привет» (русское слово для «hello»), когда пользователь случайно вводит текст с неправильной раскладкой клавиатуры.

Заключение

Нечёткий поиск больше не является опциональным — он необходим для современных реализаций поиска. Manticore Search предоставляет сложные, но доступные возможности нечёткого поиска, которые могут значительно улучшить пользовательский опыт, учитывая естественные вариации в запросах, сформированных человеком.

Используя алгоритм расстояния Левенштейна от Manticore и уникальное распознавание раскладки клавиатуры, вы можете создавать поисковые интерфейсы, которые кажутся почти волшебными для пользователей. Они найдут то, что ищут, даже если запрос не будет точно соответствовать.

Независимо от того, создаёте ли вы платформу электронной коммерции, систему управления контентом или любое приложение с функцией поиска, внедрение нечёткого поиска с Manticore может привести к более высокой удовлетворенности пользователей, лучшему вовлечению и, в конечном итоге, повышению коэффициента конверсии.

Дополнительные ресурсы

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

Установите Manticore Search одной командой в Linux или macOS:

curl https://manticoresearch.com | sh

Для расширенных вариантов установки см. полное руководство по установке и документацию .

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