blog-post

Новый нечеткий поиск и автозаполнение в 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:

$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", учитывая опечатки и проблемы с раскладкой клавиатуры.

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

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

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

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

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

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

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

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

Применение новых функций в демонстрации поиска по проблемам GitHub

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

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

Как это выглядит в демонстрации поиска по проблемам GitHub

Интеграция Автозаполнения и Нечеткого Поиска с Угадыванием Раскладки Клавиатуры с использованием Manticore Search улучшает взаимодействие пользователей с инструментом поиска. Используя нечеткость для поиска и предлагая предложения на основе шаблонов ввода, пользователи могут быстро находить релевантные результаты.

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

Autocomplete Showcase

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

Fuzzy Search Showcase

Заключение

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

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

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


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

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