Эффективный полнотекстовый поиск

Вопрос или проблема

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

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


Размер проблемы

  • <10 миллионов новых файлов данных создаются ежедневно
  • ~5 запросов в день (на самом деле всего несколько случаев ежедневно)
  • полуструктурированные данные
  • размер одного файла данных варьируется от 1 кБ до ~10s МБ (долгая обработка с множеством исключений)
  • требуемый срок хранения – несколько недель

Текущее решение

Поскольку соотношение запросов и записей составляет 5/10M и данные не полностью структурированы, не имело смысла беспокоиться о системе управления базами данных. Запуск такого сервера + хранилища не был бы эффективен.

Таким образом, это свелось к использованию grep с несколькими аргументами. Запросы определенно не быстрые, но…


Есть ли лучшее и экономически эффективное решение?

  • Использование альтернативы “быстрому grep”? Я слышал о ripgrep и т.д.
  • Миграция на программное обеспечение, подобное базе данных, недорого индексирующее полуструктурированные данные? Запуск Elasticsearch стоит $$$, и, насколько мне известно, не очень хорошо обрабатывает полуструктурированные данные из коробки.

Если вы хотите оставаться на бесплатном текстовом инструменте, hypergrep является самым быстрым или одним из самых быстрых альтернатив grep. Он полностью сосредоточен на скорости, в отличие от, например, упомянутого ripgrep.

SOLR

  • удивительно быстро обрабатывает данные
  • может обрабатывать неструктурированные данные… в основном вы будете использовать поиск по свободному тексту
  • в то время как его парсеры могут принимать текст на языке, таком как английский, и токенизировать его таким образом, чтобы понимать стемминг (слова “baby” и “babies” являются одним и тем же понятием), вы можете избежать этого для технического текста. Это может потребовать некоторой настройки, например, если ваш поиск обычно включает слова: будут ли они близко размещены или просто где-то. Все это очень настраиваемо.
  • если вашим пользователям потребуется возможность поиска по синонимам, это может быть поддержано.
  • слова, которые не добавляют ценности индекс, могут быть опущены. Они называются стоп-словами. “the” является примером для английского языка.
  • вы можете сохранить поля, используемые для управления индексом, например, дату записи, и можете удалять на основе дат
  • он может обслуживать запросы при обновлении индекса (некоторое внимание к пакетным обновлениям в “commit”)
  • это не просто установить в кластерном окружении, но, возможно, масштабируемость производительности/устойчивость не являются проблемой
  • не требует большого объема ОЗУ; он строит индексы на диске

Ответ или решение

Эффективный полнотекстовый поиск для полуструктурированных данных

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

Потенциальные решения

  1. Оптимизация с помощью альтернатив grep:

    • HyperGrep: Этот инструмент может значительно улучшить скорость поиска в сравнении с традиционным grep. Он специально разработан для быстрого анализа текстовых данных, что делает его отличным выбором для вашей ситуации, где основное внимание уделяется скорости выполнения запросов.
  2. Для обработки полуструктурированных данных:

    • Apache Solr: Это решение обладает множеством функций, которые позволяют эффективно работать с неструктурированными данными.
      • Парсинг и токенизация: Solr может обрабатывать текст на различных языках, включая английский, и может быть настроен для работы с техническим текстом.
      • Настройка поиска: Вы можете настроить параметры, такие как синонимы и стоп-слова для повышения точности поиска.
      • Индексация: Solr позволяет хранить всю информацию об индексе на диске, что минимизирует требования к оперативной памяти. Это особенно полезно при больших объемах данных.
  3. Преимущества использования Solr:

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

Заключение

С учётом ваших текущих потребностей в быстрых и эффективных поисках полуструктурированных данных, сочетание HyperGrep для быстрого поиска и Apache Solr для управления и индексации данных представляет собой идеальное экономически эффективное решение. Эти инструменты могут значительно повысить эффективность работы вашей системы, обеспечивая при этом простоту внедрения и настройки. Адаптация данных к новым требованиям позволит вам оптимизировать процесс обработки запросов, минимизировав расходы в долгосрочной перспективе.

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

Оцените материал
Добавить комментарий

Капча загружается...