Синонимы, транслит и магия: Как заставить систему читать мысли пользователя
Поиск сопровождает практически любую информационную систему — будь то интернет-магазин, таск-трекер, CRM или что-либо другое. Заветная иконка поиска присутствует почти везде.
.png)
В зависимости от проекта к данной функции предъявляются разные требования. Например, в магазине автозапчастей поиск чаще всего осуществляется по артикулу — казалось бы, просто, но данных очень много. В интернет-магазинах требования к поиску максимально широкие.
Речь идет о транслите, учете ошибок в написании, синонимах и других тонкостях. Обычно все начинается с классического поиска в формате выборки по SQL или нечеткого поиска..
Эволюция
Штатный битрикс поиск умеет искать по названиям и описаниям. Дополнительно в него можно включить любое свойство, чтобы расширить возможности поиска. Это отличный вариант улучшения на старте. Достаточно загрузить каталог в 1С или на сайт и через запятую добавить ключи, по которым должен осуществляться поиск товаров. Функция транслита обычно присутствует, но почти всегда остается выключенной.
Далее можно рассмотреть варианты с дополнительными модулями — поиск работает лучше, но не стоит ожидать чудес.
Появляется Sphinx — довольно старая система, но ее преимущество перед стандартным решением в том, что мы сами индексируем нужные нам данные, плюс поиск становится условно быстрым.
Затем на сцену выходят мощные решения вроде Elasticsearch \+ Kibana — инструмент, который мы регулярно внедряем клиентам. Здесь можно самостоятельно настроить индексацию, синонимы, учет ошибок и аналитические дашборды, а также установить веса — просто идеально.
Мода
Для стартапов и небольших приложений подойдут Meilisearch и Typesense с их простотой использования и быстрой интеграцией. Проекты, связанные с искусственным интеллектом, оценят Weaviate и Milvus благодаря семантическому поиску. Для корпоративных решений рассмотрите Vespa или Opensearch. При необходимости встроить поиск в существующую инфраструктуру обратите внимание на RedisSearch или ZincSearch.
SaaS-сервисы: быстро, но с ограничениями
Отдельно стоит упомянуть SaaS-сервисы. Туда загружается XML или JSON с контентом для индексации, после чего возвращается готовая выдача. Практически это выглядит как установка фрейма или JS-строки поиска с последующим вызовом Vue-компонента с результатами.
Такой подход удобен, но имеет существенные ограничения: зависимость от стороннего сервиса, ежемесячные платежи и невозможность создать, например, SEO-страницу поиска. Это не самый профессиональный способ решения задачи, хотя иногда может быть оправдан срочностью.
Что важно учесть
1. Обработка ввода пользователя
- Транслитерация: Поддержка ввода на русском и английском (например, «stul» и «стул»).
- Опечатки: Распознавание и исправление ошибок (например, «стлу» → «стул»).
- Синонимы: Учет различных формулировок (например, «диван» = «софа»).
- Регистронезависимость: Поиск должен работать независимо от регистра (например, «СТУЛ» = «стул»).
- Множественное число и склонения: Поддержка форм слов (например, «стула», «стулья»).
- Префиксный поиск: Результаты при вводе части слова (например, «стул» → «стул», «стулья», «стульчик»).
2. Логика поиска
- Релевантность: Ранжирование результатов по популярности, наличию и соответствию.
- Поиск по полям: Разделение на основные (названия, категории) и дополнительные (описания, характеристики).
- Фильтры и сортировка: Поддержка фильтров по цене, наличию, категориям и т. д.
- Поиск по частям фраз: Например, «детский стул» → «стул детский», «детский стол и стул».
- Сложные запросы: Поиск по нескольким параметрам одновременно (например, «стул деревянный дешевый»).
3. Обогащение функционала
- Перевод слов: Если сайт многоязычный, поиск должен учитывать перевод (например, «chair» = «стул»).
- Популярные запросы: Отображение популярных и трендовых запросов.
- Подсказки (автокомплит): Предложение вариантов поиска во время ввода.
- История запросов: Возможность повторить предыдущие поиски.
- Семантический поиск: Понимание контекста, даже если запрос некорректен (например, «стол круглый белый»).
Как выбрать правильное решение поиска
Нередко к нам обращаются клиенты с жалобой, что поиск не работает. Это общее описание проблемы, поэтому необходимо получить конкретику, чтобы определить дальнейшие действия.
Для структуризации задачи мы высылаем клиентам опросный лист в формате таблицы, где просим описать проблемы по определенному шаблону: ключевые моменты, текущие результаты и желаемый.
По результатам заполнения таблицы становится понятно, стоит ли просто доработать штатный поиск или необходимо внедрять более тяжеловесное решение.
Вот пример таблицы, которую клиент сможет заполнить для анализа текущей работы поиска.
Таблица
В формате Google Таблицы: https://docs.google.com/spreadsheets/d/1diUu2S1K1l3vBBoYsmDVYI6eH4FJrBLCEQv_WrWMt1s/edit?usp=sharing
Запрос | Что выводится сейчас | Что должно выводиться (ожидаемый результат) | Ошибка, которая не обрабатывается |
---|---|---|---|
молоко | Ссылка на результаты поиска | Товары с «молоко», включая «молоко 1%», «кефир» и «йогурт». Все виды хлеба, включая «багет», «батон», «нарезка». | Не учитываются синонимы (например, «кефир», «йогурт»). |
хлеб | Ссылка на результаты поиска | Все виды хлеба, включая «багет», «батон», «нарезка» | Нет обработки синонимов (например, «батон»). |
mlk | Ссылка на результаты поиска | Результаты с «молоко» (транслитерация «mlk» → «молоко»). | Транслит не обрабатывается. |
яблк | Ссылка на результаты поиска | Результаты для «яблоко» (исправление опечатки). | Опечатка не обрабатывается. |
шокоадный | Ссылка на результаты поиска | Товары с «шоколад», «батончик», включая «сникерс», «твикс». | Поиск работает строго по фразе, не учитывает раздельный поиск слов. |
молоко детское | Ссылка на результаты поиска | Товары с молоком, включая категорию «детское». | Нет фильтрации по категориям (например, «детское молоко»). |
1л молока | Ссылка на результаты поиска | «Молоко 1 литр», «кефир 1 литр». | Нет обработки числовых значений. |
яблоки зеленые | Ссылка на результаты поиска | Зеленые яблоки, включая категории «фрукты», «яблоки». | Не работает поиск по ключевым словам с уточнением цвета. |
Инструкция для заполнения:
- Запрос: Впишите поисковый запрос, который пользователь может ввести.
- Что выводится сейчас: Скопируйте ссылку на текущие результаты поиска (или опишите, что выводится).
- Что должно выводиться: Опишите, как вы ожидаете, что результаты должны быть отображены.
- Ошибка, которая не обрабатывается: Укажите, какая ошибка присутствует в работе поиска (например, отсутствие фильтрации, неработающие синонимы, игнорирование опечаток и т. д.).
Этот формат поможет четко определить проблемные места и области для улучшения.
Заключение
При выборе дальнейшего решения важно помнить о производительности. Если в системе миллион товаров или торговых предложений, выбор решений становится существенно ограниченным.
Вспоминая пример с Wrike, где поиск осуществлялся по названиям, содержанию описаний проектов и задач, включая комментарии. А в Яндекс.Трекере, к примеру, общий поиск работает только по названиям задач — крайне неудобно.
Важно отметить, нужна какая то система аналитики с отслеживание самых популярных запросов и запросов на которых нет ответов. Это позволит постепенно улучшать поиск.
Поиск в проектах с большим объемом информации — это настоящий помощник, позволяющий быстро находить давно утерянные данные. Не пренебрегайте этой, казалось бы, тривиальной функцией, улучшайте ее. Пользователи будут благодарны, что конечном итоге улучшит ваши метрике и бизнес будет благодарен.