С конца 2000-х мы занимались автоматизацией процессов в службах безопасности крупных компаний. Почти во всех компаниях одной из ключевых задач безопасности была проверка потенциальных клиентов и контрагентов на благонадёжность. Проверка включала в себя регулярный поиск информации о компаниях или людях в огромном массиве текстовой информации. Массив этот представлял (и по-прежнему представляет) собой несколько десятков миллионов документов в разных форматах и из разных источников. Это могли быть справки, отчеты, выписки в форматах pdf, doc, xls, txt, иногда сканы в тех же pdf, tiff и пр. В целом, задача быстрого поиска информации о какой-либо компании или человеке в этом массиве данных критически важна для любого бизнеса.
Мы прошли долгий путь от использования dtSearch до полноценного собственного решения. В этой статье хотим поделиться нашим опытом.
Для автоматизации процесса проверок мы использовали собственные решения, однако движком для полнотекстового поиска в документах у нас был dtSearch. Немного о нашем выборе (который был проведён в 2010 году и оставался с нами до осени 2016 года):
- Выбор стоял между Cross, Copernic, Архивариус, dtSearch и несколькими экзотическими решениями
- Сравнение скорости запросов на большом объёме данных показало очевидного победителя — dtSearch
- У dtSearch на тот момент был самый развитый синтаксис запросов, который позволял нам реализовать все "тонкости" поиска информации
- У dtSearch есть API в виде библиотеки для C#, которую мы использовали для интеграции движка в нашу систему. Не самый удобный вариант, но на то время был самым приемлемым
Что было дальше
Шли годы, наша система развивалась, и постепенно dtSearch становился узким и проблемным местом:
- Непрерывно росли объёмы информации, вместе с этим падала скорость поиска, к концу 2016 года некоторые запросы занимали по 5 минут — абсолютно неприемлемый показатель
- dtSearch не распознаёт сканированные документы (OCR), а таких документов становилось всё больше и больше — соответственно теряли много информации
- dtSearch некорректно индексирует файлы в кодировке CP866
- dtSearch не всегда корректно токенизирует фразы, номера, даты и слова, из-за чего может теряться информация, например, при поиске составных фамилий или номеров телефонов
- Наши системы постепенно переехали с ASP.NET MVC/C#/MSSQL стека на более современный React/Node.js/Python/ElasticSearch/MongoDB, а с dtSearch можно интегрироваться только через С++ или C# API, из-за чего приходилось городить сложную интеграцию (очень хотелось REST)
- Для индексатора dtSearch приходилось использовать полноценный Windows Server
- dtSearch не умеет работать в кластере, что важно на огромных объёмах. Приходилось держать одну очень толстую машину специально для dtSearch
Список можно продолжить и дальше, но всё остальное — мелочи, по сравнению с проблемами, перечисленными выше.
Поэтому в определённый момент мы поняли, что больше так жить нельзя и нужно искать альтернативы или создать собственное решение. Поиск альтернатив, к нашему большому сожалению, ничего толкового не принёс, существовавшие в 2010 году продукты особо не продвинулись вперёд, а появившиеся новые (LucidWorks Fusion, SearchInform и пр.) нас совершенно не впечатлили.
Далее мы рассмотрели вариант создания модуля полнотекстового поиска для нашей системы, используя Apache Tika + ElasticSearch или Apache Solr, что в целом решило бы нашу проблему. Однако, нас не переставала мучать мысль о том, что на рынке по-прежнему нет хорошего решения с быстрым поиском, OCR и удобными интерфейсами.
Поэтому, не долго думая, мы решили создать собственное open-source решение, которое бы всем облегчило жизнь — так родился Ambar.
Ambar – система полнотекстового поиска по документам
В процессе разработки мы держали в голове все те проблемы, которые нас преследовали с dtSearch. Поэтому нашими основными требованиями к системе были: лёгкая, интуитивно понятная, при этом мощная, и масштабируемая. Ориентировались мы сразу на объёмы в десятки и сотни миллионов файлов, обязательным условием был быстрый поиск, занимающий не более половины секунды независимо от сложности запроса и количества документов.
Релиз состоялся в январе 2017 г. Тогда мы запустили Ambar у первого крупного клиента.
Основные моменты о нашей системе, которые важно знать:
- Супербыстрый поиск с учётом особенностей языка: например, нечёткий поисковый запрос занимает около ста миллисекунд в более чем десятке миллионов файлов
- Лёгкий и понятный интерфейс, как для поиска, так и для администрирования
- Поддержка всех распространённых (и не очень) форматов файлов и дедубликация
- Лучший на рынке парсинг pdf, умное определение типа страницы (скан/текст)
- Продвинутый OCR
- Продвинутый полнотекстовый анализатор, теперь вы не потеряете информацию из-за неправильно токенизации дат, телефонов и пр.
- Простой REST API, лёгкая интеграция с чем угодно
- Возможность использования облачной версии или установка на собственном железе
- При установке на собственном железе возможна установка в кластере и масштабирование до петабайт данных
В ближайшее время мы планируем добавить возможность читать и индексировать содержимое почты и начать развивать аналитическую часть системы добавив распознавания именованных сущностей (фио, адреса, номера документов, идентификационные номера, телефоны).
> Наш блог, где мы делимся всеми интересными фактами и наработками
Спасибо за внимание!
Комментарии (12)
wyfinger
07.04.2017 10:32Это черновик статьи?
Нужно больше информации.sochix
07.04.2017 10:36Здравствуйте, а какого рода информация вам нужна? Больше информации вы можете найти, например, на нашем landing page: https://ambar.cloud
wyfinger
07.04.2017 10:49Ну вот например: есть файловый сервер, доступный по сети (SMB), где > 1.5 млн. различных документов, в основном Word/Excel, также есть PDF, большое количество сканов в PDF, короче говоря средний офис.
Сейчас использую Архивариус — индексирую самостоятельно ту часть документов, с которой больше всего работаю.
Ваша система сможет заменить Архивариус?
Если да, хотелось бы пошаговую инструкцию по установке/настройке.
al33
07.04.2017 11:53Используете ли вы индексацию?
Можно ли привести сравнение с dtSearch по вопросу скорости индексации? При условии, что объёмы информации (Офисные документы, email форматы с приложениями, HTML, XML/XSL, в том числе RAR, ZIP, GZIP, TAR) находятся на уровне 100 Гиб, 500 Гиб, 1Тиб.
Если есть индексация, то используете полностью самописный движок или что-то существующее?
Можете ли привести запросы к dtSearch, которые работали до 5 минут? А простые запросы с какой скоростью отрабатывают?sochix
07.04.2017 12:11Здравствуйте,
Используете ли вы индексацию?
Используем
Если есть индексация, то используете полностью самописный движок или что-то существующее?
В качестве поискового движка используем тонко настроенный ElasticSearch
Можно ли привести сравнение с dtSearch по вопросу скорости индексации?
Если речь идет о скорости сбора и индексации, а не поиска, то она сравнима с dtSearch при условии сбора данных по сети. По опыту внедрения у клиентов, Ambar собирает и обрабатывает (извлечение текста + ocr + индексация) около 1 млн документов в сутки.
Можете ли привести запросы к dtSearch, которые работали до 5 минут?
Например, запрос
"Иванов Иван Иванович" w/5 75
в 4 млн. документов (примерно 400 Гб файлов)
А простые запросы с какой скоростью отрабатывают?
Простые запросы в dtSearch типа ИНН компании, без усложнений, выполняется несколько секунд.
zxweed