Время прочтения: 8 мин.

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

Итак, что такое эффективная поисковая система?

Основная цель поиска — найти наиболее релевантные совпадения с запросами пользователя, исключая другой общий контент с веб-сайта. Самыми популярными функциями, которыми обладают современные поисковые системы являются:

  • полнотекстовый поиск (по простым словам, фразам, или нескольким формам слова или фразам);
  • многополевой поиск;
  • выделение (визуальное указание слов, введенных в поле поиска);
  • поиск по синонимам;
  • предложения автозаполнения
  • фасетный поиск (поиск по атрибутам, например, на сайтах электронной коммерции фасеты используются, чтобы сообщить покупателям, сколько элементов определенной модели, размера, цвета и других атрибутов найдено)
  • нечеткий поиск (опечатки, орфографические ошибки);
  • орфографические исправления;
  • геопространственный поиск (для определения местоположения объекта по широте и долготе)

Система должна иметь возможность сужать поиск, используя диапазоны (цена, даты, размеры и т.п.), сортировать (по популярности, дате, цене) и фильтровать (включая только желаемые параметры) данные.

Когда мы говорим о веб-приложениях, в которых информация изменяется динамически (цены, подробное описание, наличие товаров), чрезвычайно важно обновлять данные близко к реальному времени; например, в электронной коммерции или системах бронирования, чтобы показать товары и услуги, доступные в текущий момент.

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

Какую же технологию выбрать?

В интернете можно найти сведения о нескольких десятках поисковых инструментов, но, если необходимо найти надежное и эффективное решение для своего веб-приложения, имеет смысл рассмотреть имеющихся лидеров: Elasticsearch, Solr или Sphinx.

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

Elasticsearch (ES), абсолютный лидер рейтинга поисковых систем, подтверждает свое название как действительно «эластичный», поскольку может работать в любой среде. Это технология с открытым исходным кодом, в которой используется библиотека Apache Lucene. Многие всемирно известные компании, такие как TripAdvisor, Mozilla, Github, eBay, и Netflix используют ES для своих приложений.

Основные преимущеcтва ES

Индексация практически в реальном времени. ES может индексировать динамически изменяющиеся данные практически мгновенно (менее чем за 1 секунду). Это делает ценным его использование в проектах, где база данных постоянно обновляется.

Высокая масштабируемость. Очевидно, что когда размер базы данных растет, то искать становится труднее. Но ES масштабируется по мере увеличения вашей БД, поэтому скорость поиска не снижается.

Хранение. ES можно использовать не только как индексатор, но и как хранилище данных. Однако, с точки зрения безопасности и надежности, целесообразно хранить данные в основной БД, используя ES только для индексации данных и хранения журналов.

Визуализация данных. Это одна из модных сегодня функций, которая хорошо реализована в ES. Elastic Stack (комбинация плагинов ES, Logstash и Kibana) — отличный инструмент для аналитики. Он позволяет в режиме реального времени отслеживать трафик приложения (общее количество посетителей, количество уникальных посетителей, IP-адреса, самые популярные запросы, наиболее запрашиваемые страницы, используемые устройства и браузеры, журналы трафика по времени суток и многое другое). Эта информация визуализируется в диаграммах, картах и ​​таблицах на панели управления.

Аналитика безопасности. Elastic Stack также является полезным инструментом для анализа безопасности. Аналитика и визуализация логов практически в реальном времени позволяет выявлять угрозы безопасности (проблемы с веб-сервером, неработающие ссылки, попытки несанкционированного доступа, места атак и т. д.).

Машинное обучение. ES может воспользоваться функциями машинного обучения, предоставляемыми коммерческим плагином X-Pack. Алгоритмы машинного обучения ориентированы на обнаружение аномалий и выбросов в данных временных рядов.

Amazon Elasticsearch Service. Amazon Elasticsearch Service обеспечивает быструю и простую настройку, работу и масштабирование ES в облаке без необходимости настраивать собственные серверы.

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

Solr — это еще одна поисковая система, основанная на Apache Lucene, и поэтому она имеет много общих функций с ES. Но, тем не менее, они разные по архитектуре. Среди компаний, использующих Solr — Cnet, CitySearch, Bloomberg, Zappos, AOL, eTrade, Disney, Apple, NASA, MTV и другие.

Сильные стороны Solr

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

Богатый набор функций. Solr может похвастаться богатыми функциями полнотекстового поиска, которые легко настраиваются даже по сравнению с ES. Solr поддерживает различные реализации подсказчиков, функции выделения (визуальное указание слов, введенных в поле) и средства проверки орфографии / «Возможно Вы имели в виду?» (которые отсутствуют в ES).

Документы с разнообразным содержанием. Solr — одна из немногих поисковых систем, которая может читать документы в разных форматах, включая PDF, Word, XML или простой текст. Это идеально подходит для проектов, в которых необходимо просмотреть большое количество файлов PDF или Word на веб-сайте (включая контракты, резюме, учебные материалы, электронные книги и т. д.).

Визуализация данных. Banana — это инструмент визуализации (ответвление Kibana), который работает для Solr и позволяет администраторам отслеживать события в режиме реального времени.

Машинное обучение. Solr в сотрудничестве с Bloomberg реализовал машинное обучение (плагин Learning-to-Rank), используя концепцию повторного ранжирования документов в соответствии с оценкой более сложного запроса. В результате пользователям предоставляются возможности значительного ускорения их поиска.

Не без ложки дегтя… Solr не так быстр, как ES, и лучше всего работает со статическими данными (которые не требуют частого изменения). Причина в разных стратегиях использования кеша.  В Solr кеш является глобальными. Что означает, что когда в нем происходит даже малейшее изменение, вся индексация требует обновления. Понятно, что это не быстрый процесс. В отличие от Solr, ES обновляет кеш по сегментам.

Sphinx не входит в тройку самых популярных поисковых систем, хотя и является мощной и популярной технологией. Sphinx используется в таких известных системах, как Joomla.org, CouchSurfing.org, Wikimapia.org, Tumblr.com и сотнях других приложений.

Сильные стороны Sphinx

Мощный и быстрый. Sphinx эволюционировал в последние годы и стал обеспечивать поиск в режиме, близком к реальному времени. Его скорость составляет более 500 запросов в секунду по 1 миллиону документов, при этом наибольшее зарегистрированное количество индексированных документов оценивается более, чем в 25 миллиардов.

Фасетный поиск. Sphinx имеет большой опыт работы с возможностями многогранного атрибутного поиска.

Ничего бесполезного. Если нам нужны в основном общие функции поиска и не требуются какие-либо дополнительные специфические функции, такие как визуализация и анализ данных, использование Sphinx целесообразно. Он обладает достаточной быстротой и мощностью для индексирования и обработке поисковых запросов огромных объемов документов с использованием ограниченных вычислительных ресурсов, в отличие от ES, который потребляет достаточно много памяти.

Увы, Sphinx хорош в основном для структурированных данных (предопределенные текстовые поля и нетекстовые атрибуты), но это не совсем не лучший выбор для проектов, имеющих дело с неструктурированными данными (DOC, PDF, MP3 и т. д.), поскольку настройка и обработка такого типа данных требует значительных усилий от разработчиков. Это, в совокупности с определенными сложностями в настройке, делает Sphinx менее удобным в использовании, чем ES и Solr.

Краткое резюме

Как видно из этой таблицы, различия между ES, Solr и Sphinx минимальны. Все они выполняют свою главную задачу — обеспечивают эффективный и быстрый поиск.

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