Навіщо ми створили заміну старим системам пошуку за документами

З кінця 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, легка інтеграція з чим завгодно
  • Можливість використання хмарної версії або встановлення на власному залізі
  • При установці на власному залізі можлива установка в кластері і масштабування до петабайт даних

Найближчим часом ми плануємо додати можливість читати та індексувати вміст пошти і почати розвивати аналітичну частину системи додавши розпізнавання іменованих сутностей (фіо, адреси, номери документів, ідентифікаційні номери, телефони).

 Опис проекту і контакти

 Сторінка проекту на GitHub

- Наш блог, де ми ділимося всіма цікавими фактами і напрацюваннями

Дякую за увагу!