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

Новый нечёткий поиск и автодополнение в Manticore Search

author image
View as markdown

TL;DR

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

Введение

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

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

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

Реализация нечёткого поиска

Устойчивость к опечаткам: в чём проблема

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

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

Исторически Manticore Search предлагал встроенную поддержку нечёткого сопоставления через свои методы CALL QSUGGEST и CALL SUGGEST . Первый позволяет находить последнее слово в вашей заданной фразе с расстоянием Левенштейна, что позволяет осуществлять поиск с допустимостью опечаток, но только для последнего слова. А последний работает только для первого слова в вашей фразе. Пример использования клиента 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» благодаря функции нечёткого поиска. Такой подход помогает пользователям получать точные подсказки, даже при наличии опечаток.

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

Угадывание раскладки клавиатуры

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

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

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

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

С этими новыми функциями мы с радостью улучшили наш демо-пример поиска по 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'],
        ],
    ],
]);

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

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

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

Демонстрация автодополнения

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

Демонстрация нечёткого поиска

Заключение

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

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

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


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

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

curl https://manticoresearch.com | sh

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

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