TL;DR
Мы рады представить две новые важные функции в Manticore Search: Нечеткий поиск и Предложение запросов (или “Автозаполнение”). Эти функции улучшают возможности поиска, обеспечивая более удобный интерфейс для пользователей. Вы можете увидеть их в действии в нашей открытой демонстрации поиска GitHub Issues .
- Ознакомьтесь с тем, как это работает в демонстрации GitHub
- Исследуйте открытый проект: Репозиторий демонстрации GitHub
Введение
Вы, возможно, читали о демонстрации поиска GitHub Issues и о том, как мы добавили семантический поиск к ней. Недавно мы добавили автозаполнение к ней. Этот процесс прост и требует лишь минимальных изменений. Для получения более подробной информации ознакомьтесь с этой статьей: Новый нечеткий поиск и автозаполнение . Сегодня мы хотим поделиться двумя новыми функциями, которые еще больше улучшают опыт поиска: Нечеткий поиск и Предложение запросов (также известное как “Автозаполнение”):
- Нечеткий поиск помогает пользователям находить результаты даже при небольших опечатках.
- Предложение запросов предлагает соответствующие фразы, пока пользователи вводят текст, ускоряя процесс поиска.
Эти функции не только улучшают удобство использования нашего инструмента поиска для GitHub Issues , но и демонстрируют передовые возможности 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 улучшает взаимодействие пользователей с инструментом поиска. Используя нечеткость для поиска и предлагая предложения на основе шаблонов ввода, пользователи могут быстро находить релевантные результаты.
Вот как работает функция автозаполнения, имитируя популярные интерфейсы предложений поиска:
Кроме того, нечеткий поиск улучшает взаимодействие с пользователями, устраняя общие проблемы, такие как опечатки. Если кто-то ищет продукт, но делает опечатку, нечеткий поиск гарантирует, что он все равно получит релевантные результаты. Вот как это выглядит в демонстрации поиска проблем на GitHub:
Заключение
Интегрируя Нечеткий поиск и Предложения запросов в Manticore Search, мы значительно улучшили его возможности. Эти функции делают поиск более интуитивным, прощающим и эффективным.
Мы призываем вас опробовать эти новые функции в нашей демонстрации поиска проблем на GitHub и поделиться вашим мнением. Ваши отзывы бесценны, поскольку мы продолжаем улучшать и расширять возможности Manticore Search.
Оставайтесь на связи для получения новых обновлений, и, пожалуйста, рассмотрите возможность установки звезды нашему репозиторию на GitHub , если вы находите проект полезным!