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

New fuzzy search and autocomplete in Manticore Search

TL;DR

Мы рады представить две новые важные функции в Manticore Search: Нечеткий Поиск и Предложения Запросов (или "Автозаполнение"). Эти функции улучшают возможности поиска, предлагая более удобный интерфейс. Вы можете увидеть их в действии в нашей открытой демонстрации поиска по проблемам на GitHub .

Введение

Вы, возможно, читали о демонстрации поиска по проблемам на GitHub и о том, как мы добавили семантический поиск к ней. Недавно мы добавили функциональность автозаполнения. Этот процесс прост и требует лишь минимальных изменений. Для получения более подробной информации ознакомьтесь с этой статьей: Новый Нечеткий Поиск и Автозаполнение . Сегодня мы хотим поделиться двумя новыми функциями, которые еще больше улучшают опыт поиска: Нечеткий Поиск и Предложения Запросов (также известные как "Автозаполнение"):

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

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

Реализация Нечеткого Поиска

Проблема Допустимости Опечаток

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

Устаревшее Нечеткое Сопоставление с CALL QSUGGEST

Исторически Manticore Search предлагал встроенную поддержку нечеткого сопоставления через свои методы <code>CALL QSUGGEST</code> и <code>CALL SUGGEST</code> . Первый позволяет находить последнее слово в вашей заданной фразе с расстоянием Левенштейна, что позволяет осуществлять поиск с допустимостью опечаток, но только для последнего слова. А последний работает только для первого слова в вашей фразе. Пример использования клиента Manticore PHP :

$params = [
    'index' => 'issue',
    'body' => [
        'query'=> 'fzzy',
        'options' => [
            'limit' => 10,
            'max_edits' => 2,
        ],
    ],
];
$response = $client->suggest($params);

В этом фрагменте кода клиент использует функцию CALL SUGGEST, чтобы найти предложения для неправильно написанного слова "fzzy". Параметр max_edits контролирует максимальное расстояние Левенштейна, допустимое между вводимым словом и потенциальными предложениями. Расстояние Левенштейна — это минимальное количество изменений одного символа (вставок, удалений или замен), необходимых для преобразования одного слова в другое. Установив max_edits в 2, мы допускаем до 2 различий в символах, что позволяет находить опечатки и похожие слова в пределах этого расстояния.

Хотя этот подход мощный, он может быть несколько сложным, так как вам нужно обрабатывать все предложения, возвращаемые функцией, в вашем приложении. Кроме того, CALL QSUGGEST не обрабатывает угадывание раскладки клавиатуры (об этом мы поговорим позже). Чтобы сделать нечеткий поиск более удобным для пользователя и проще для интеграции, мы представили новую опцию в Manticore Search, которая позволяет выполнять нечеткий поиск с конкретными параметрами, не требуя дополнительного кода или пользовательской логики.

Новое Упрощенное Нечеткое Сопоставление

Теперь у нас есть более простой вариант. Добавив fuzzy=1 к параметрам вашего поискового запроса, вы можете легко включить нечеткий поиск.

Вот простой пример:

$client = new Client();
$index = $client->index('issues');

$query = 'fzzy serch';
$result = $index->search($query)->option('fuzzy', 1)->get();

foreach ($result as $hit) {
    echo $hit->getTitle() . "\n";
}

Этот код включает нечеткий поиск для неправильно написанного "fzzy serch", позволяя Manticore найти "fuzzy search.". Вот как это выглядит в нашей демонстрации поиска на GitHub :

Пример Нечеткого Поиска

Вы можете прочитать больше о нечетком сопоставлении в документации по нечеткому поиску .

Реализация Предложений Запросов (Автозаполнение)

Сила Предсказательного Поиска

Предложения запросов или функции автозаполнения делают поиск быстрее и помогают пользователям обнаруживать релевантные запросы, о которых они могли не подумать:
Пример Автозаполнения

Устаревшее Автозаполнение с CALL KEYWORDS

Так же, как и для CALL QSUGGEST, для нечеткого сопоставления Manticore Search исторически имел другой метод, CALL KEYWORDS, который можно использовать для функциональности автозаполнения. Этот метод позволяет выполнять сопоставление по префиксам и инфиксам по ключевым словам в вашей таблице, предоставляя простой, но эффективный способ реализации функций автозаполнения. К сожалению, он работает только с жестким сопоставлением префиксов/суффиксов без допустимости опечаток, что означает, что если пользователь делает ошибку, он не найдет никаких ключевых слов. Вот как вы можете использовать его с клиентом Manticore PHP:

$index = 'myindex';
$query = 'pref*';

$response = $client->keywords($index, $query);

foreach ($response as $keyword) {
    echo $keyword['normalized'] . ' (docs: ' . $keyword['docs'] . ', hits: ' . $keyword['hits'] . ")\n";
}

В этом примере мы используем метод CALL KEYWORDS, чтобы найти все ключевые слова в таблице myindex, которые начинаются с pref. Звездочка (*) в конце pref* указывает на сопоставление по префиксу. Вы также можете использовать сопоставление по инфиксам, разместив звездочки с обеих сторон вашего поискового термина, например, *some*.

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

Новый Метод Автозаполнения

Мы представили новый метод, который формирует предложения из нескольких вводимых слов и поддерживает опечатки. Этот метод объединяет функции CALL KEYWORDS и CALL QSUGGEST.

Например, вот как использовать новую функцию автодополнения в PHP‑клиенте:

$client = new Client();
$result = $client->autocomplete([
    'body' => [
        'table' => 'issues',
        'query' => 'hllo wor',
        'options' => [
            'fuzziness' => 1,
            'layouts' => ['us', 'ru'],
        ],
    ],
]);

foreach ($result[0]['data'] as $suggestion) {
    echo $suggestion . "\n";
}

Этот код предлагает «hello world» для ввода «hllo wor», учитывая опечатки и проблемы с раскладкой клавиатуры.

Вот как это реализовано внутри: мы повторно использовали логику нечеткого поиска из Fuzzy Search для создания релевантных предложений. Метод использует низкоуровневую функциональность CALL KEYWORDS и CALL QSUGGEST для генерации вариантов из вашего набора данных.

Чтобы обеспечить точные предложения, мы оцениваем расстояние исходя из длины слова и количества доступных документов. Например, если пользователь вводит «hllo wor», а ваши данные содержат «hello world», система предложит «hello world» благодаря функции нечеткого поиска. Такой подход помогает пользователям получать точные предложения, даже при наличии опечаток.

Больше информации об автодополнении вы можете найти в документации по автодополнению .

Keyboard Layout Guessing

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

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

Преимущества включают:

  • Повышенная точность поиска для многоязычных пользователей
  • Устраняет раздражение от случайных переключений раскладки
  • Бесшовная интеграция с нашими функциями нечеткого поиска и автодополнения

Applying New Features to the GitHub Issue Search Demo

С этими новыми функциями мы с радостью улучшили наш демо‑пример поиска по GitHub Issue. Интеграция нечеткого поиска и автодополнения прошла без труда благодаря удобному дизайну Manticore.

Чтобы включить нечеткий поиск, мы просто добавили эти строки в наш поисковый запрос:

$search->option('fuzzy', 1);
$search->option('layouts', ['ru', 'us', 'ua']);

Для предложений запросов мы использовали функцию нового автодополнения :

$result = $client->autocomplete([
    'body' => [
        'table' => $table,
        'query' => $query,
        'options' => [
            'fuzziness' => 1,
            'layouts' => ['ru', 'ua', 'us'],
        ],
    ],
]);

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

How it looks on Github Issue Search demo

Интеграция автодополнения и нечеткого поиска с определением раскладки клавиатуры с помощью Manticore Search улучшает взаимодействие пользователей с поисковым инструментом. Используя нечеткость в поиске и предлагая подсказки на основе шаблонов ввода, пользователи могут быстро находить релевантные результаты.

Ниже показано, как работает функция автодополнения, имитируя популярные интерфейсы подсказок поиска:

Autocomplete Showcase

Кроме того, нечеткий поиск улучшает взаимодействие с пользователем, решая распространённые проблемы, такие как опечатки. Если кто‑то ищет продукт, но делает ошибку, нечеткий поиск гарантирует, что он всё равно получит релевантные результаты. Вот как это выглядит в демо‑версии поиска по GitHub Issue:

Fuzzy Search Showcase

Conclusion

Интегрируя Fuzzy Search и Query Suggestions в Manticore Search, мы значительно расширили его возможности. Эти функции делают поиск более интуитивным, снижающим требования к точности и эффективным.

Мы приглашаем вас опробовать эти новые функции в нашем демо‑примерe поиска по GitHub Issue и поделиться отзывами. Ваши мнения бесценны, пока мы продолжаем совершенствовать и расширять возможности Manticore Search.

Следите за новыми обновлениями и, пожалуйста, поставьте звёздочку нашему репозиторию на GitHub , если проект оказался полезным!


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

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