blog-post

Осваиваем нечеткий поиск с Manticore Search

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

Техники нечеткого соответствия, которые мы рассмотрим в этой статье, позволяют Manticore Search реализовать интеллектуальные стратегии сопоставления, которые обеспечивают всестороннее извлечение результатов. В этом контексте релевантность становится тонким искусством, а не жесткой наукой.

Понимание релевантности поиска

Основой поиска является точное сопоставление текста, где запросы сопоставляются посимвольно с индексированным контентом. Например, поиск "ноутбук" вернет только записи, содержащие это точное слово, а не связанные термины, такие как "ноут" или "компьютер".

Точное сопоставление хорошо выполняет многие задачи. При хорошо структурированных данных поиск "ноутбук" выявит все релевантные записи, содержащие этот термин, будь то в заголовках, описаниях или категориях. С улучшенной моделью данных поиск "ноутбук" может даже вернуть связанные элементы, такие как аксессуары для ноутбуков или компьютерные услуги.

Однако что происходит, когда точный термин отсутствует в записях, несмотря на то, что контент релевантен? Синонимы могут помочь здесь. Но что, если кто-то ищет "ноутбук", но вводит "ноутбк"? Без нечеткого соответствия поиск не даст результатов.

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

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

Понимание нечеткого поиска

Что такое нечеткий поиск?

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

Альтернативные термины включают приближенное сопоставление строк или нечеткое сопоставление строк.

Примеры:

  • Введите "хело", найдите записи с "привет"
  • Введите "помощь", найдите записи с помощью и привет

Смотрите больше примеров и как это реализовано в Manticore ниже.

Что такое нечеткое соответствие?

Нечеткое соответствие расширяет концепцию, включая поиск информации на основе различных типов сходств. Мы сосредоточимся на языковых сходствах, включая синонимы, грамматические вариации (множественное число, формы глаголов и т. д.), подходы на основе словарей и другие лингвистические или НЛП-техники. Мы также рассмотрим общие функции поисковых систем, такие как сопоставление частичных слов, сопоставление фраз и возможности фильтрации.

Примеры:

  • Введите "брюки", найдите брюки, штаны, слэки (синонимы)
  • Введите "быть", найдите Beatles, пчелы (поиск по префиксу)

Смотрите больше примеров и как это реализовано в Manticore ниже.

Другие применения нечеткой логики

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

Нечеткая логика строит отношения на основе относительного сходства, а не бинарных истинных/ложных условий (объекты сопоставляются на основе того, что оба являются "портативными", а не имеют одинаковый вес).

Реализация нечеткого поиска с расстоянием Левенштейна в Manticore

Допуск ошибок позволяет пользователям совершать ошибки при наборе текста и все равно находить релевантные результаты. Manticore реализует это с помощью алгоритма расстояния Левенштейна.

Что такое опечатка?

  • Пропущенные символы: "лптп" → "ноутбук"
  • Лишние символы: "лптопп" → "ноутбук"
  • Перепутанные символы: "лпатоп" → "ноутбук"
  • Неправильные символы: "лптип" → "ноутбук"

Алгоритм расстояния Левенштейна

Допуск ошибок в Manticore использует сопоставление на основе расстояния, реализуя алгоритм расстояния Левенштейна. Расстояние измеряет разницу между введенным словом и его точным соответствием в индексе. В частности, оно представляет собой минимальное количество операций (добавление, удаление, замена или обмен символов), необходимых для преобразования одного слова в другое. Идеальное соответствие имеет расстояние 0. Когда есть точное соответствие или расстояние небольшое (один или два символа различия), запись включается в результаты.

Например, если движок получает "лптп", он может сопоставить "ноутбук" (расстояние = 1 / один символ отсутствует) или "лптпс" (расстояние = 2 / требуется две операции).

Distance sets a tolerance threshold. In Manticore, you can configure this using the distance parameter, defaulting to 2: words with a distance of 3 or more differences are excluded from results.

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

Here are examples of how Manticore calculates operations needed to match "iphone":

  • iphone - 0 differences (exact match)
  • iphon - 1 difference (deletion: e)
  • iphonee - 1 difference (addition: e)
  • iphne - 1 difference (deletion: o)
  • iphonne - 1 difference (addition: n)
  • iphne - 2 differences (deletion: o, deletion: e)
  • iphonne - 2 differences (addition: n, addition: e)
  • iphne - 3 differences (deletion: o, deletion: e, deletion: n) - beyond default threshold

Ранжирование результатов и допустимость ошибок

Regarding relevance: all fuzzy matches based on spelling differences are considered less relevant than exact matches. Therefore, records with a distance of 0 – exact matches – are ranked higher than those with errors. Similarly, records with 1 error are ranked higher than those with 2 errors.

Нечеткий поиск с учетом раскладки клавиатуры

A distinctive feature of Manticore's fuzzy search is its keyboard layout awareness. This functionality understands that users might be typing with different keyboard layouts, leading to specific types of errors.

For example, if someone accidentally types with the wrong keyboard layout active, Manticore can interpret the query by considering physical key positions across different layouts. Manticore supports 17 different keyboard layouts including QWERTY, AZERTY, QWERTZ, and others, making it highly adaptable for international applications.

For instance, a user types "yucker" on a US keyboard, but the system interprets it as a German QWERTZ layout. Manticore recognizes the mismatch and correctly maps the input to "zucker" (the German word for "sugar"). Without layout awareness, the search would fail due to the Y/Z key swap. Manticore ensures users find results even if their keyboard layout is misconfigured.

Настройка нечеткого поиска в Manticore

Implementing fuzzy search in Manticore is straightforward, with support for both SQL and JSON APIs.

Использование SQL-синтаксиса

SELECT * FROM mytable 
WHERE MATCH('someting') 
OPTION fuzzy=1, layouts='us,ua', distance=2;

In this example:

  • fuzzy=1 enables fuzzy matching
  • layouts='us,ua' specifies which keyboard layouts to consider (US and Ukrainian)
  • distance=2 sets the maximum Levenshtein distance to 2

Использование JSON API

POST /search
{
  "table": "test",
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "*": "ghbdtn"
          }
        }
      ]
    }
  },
  "options": {
    "fuzzy": true,
    "layouts": ["us", "ru"],
    "distance": 2
  }
}

This JSON example demonstrates how Manticore handles cross-layout typos—"ghbdtn" typed on a US keyboard would actually be "привет" ("hello" in Russian) if typed on a Russian keyboard.

Дополнительные техники нечеткого сопоставления

Частичное сопоставление слов с помощью префиксного поиска

Like other advanced search engines, Manticore supports prefix matching for real-time search experiences. It enables the engine to match records based on partial words.

For example, records containing "apricot" are returned as soon as a user types "a", "ap", "apr". There's no need to wait for a complete word match before showing results.

Синонимы

Synonyms tell the engine which words and expressions to consider equivalent – for example, pants = trousers. Thus, a search for "trousers" will return "trousers" and "pants", and a search for "pants" will also return "trousers" and "pants".

While general thesaurus-based synonym expansion can be too broad, Manticore allows you to define specific, contextually relevant synonyms for your dataset using wordforms .

Оптимизация нечеткого поиска для достижения наилучших результатов

While powerful, implementing fuzzy search requires careful consideration. It might return too many results or unexpected matches that could affect perceived relevance.

The search engine must manage this information expansion. For instance, by prioritizing exact matches, ensuring they appear at the top of results, above fuzzy matches:

  • For misspellings, exact matches are considered more relevant than fuzzy matches (even if the error is obvious to the user).
  • With synonyms, exact matches are more relevant than synonym matches (even if the query word has multiple meanings and the synonym would be more appropriate).

Manticore manages this by displaying fuzzy matches after exact matches. This is part of Manticore's comprehensive approach to handling search variations.

There are also many UI patterns to manage this. For example, search engines often add "suggested spellings" just below the search bar. Or they offer Autocomplete or Query-Suggestion features, where the user is given suggested queries (and categories) in a dropdown list as they type, which they can choose from as their query. Manticore provides comprehensive support for these features as documented in our Autocomplete API .

But the ideal solution is the one below the surface, completely transparent to the user, where the search engine returns results that create an intuitive feeling in the user that the displayed items are the best and most relevant results – even if not exactly matching the text of the query.

Практические приложения

Let's examine real-world scenarios where Manticore's fuzzy search excels:

Электронная коммерция

In e-commerce, users often search for products with complicated names or technical specifications they might misspell. Fuzzy search ensures they still find what they're looking for:

SELECT * FROM products 
WHERE MATCH('sansung glaxy') 
OPTION fuzzy=1, distance=2;

This query would successfully match products containing "Samsung Galaxy" despite the typos.

Управление контентом

For content-heavy sites, fuzzy search helps users discover relevant articles even when they misremember terms or titles:

SELECT * FROM articles 
WHERE MATCH('artifical inteligence') 
OPTION fuzzy=1;

This would match articles about "artificial intelligence" despite the spelling errors.

Международные веб-сайты

For sites serving multilingual audiences, keyboard layout awareness is particularly valuable:

SELECT * FROM content 
WHERE MATCH('ghdbtn') 
OPTION fuzzy=1, layouts='us,ru';

This would match content with "привет" (Russian for "hello") when a user accidentally types with the wrong keyboard layout.

Заключение

Fuzzy search is no longer optional - it's essential for modern search implementations. Manticore Search предоставляет сложные, но доступные возможности нечеткого поиска, которые могут значительно улучшить пользовательский опыт, учитывая естественные вариации в запросах, созданных людьми.

By leveraging Manticore's Levenshtein distance algorithm and unique keyboard layout awareness, you can create search experiences that feel almost magical to users. Они найдут то, что ищут, даже если не сформулируют запрос совершенно точно.

Whether you're building an e-commerce platform, content management system, or any application with search functionality, implementing fuzzy search with Manticore can lead to higher user satisfaction, better engagement, and ultimately, improved conversion rates.

Additional Resources

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

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