Пошук за великим документами в ElasticSearch


Продовжуємо цикл статей про те, як ми осягали ES в процесі створення Ambar. Перша стаття циклу була про Хайлайтинге великих текстових полів ElasticSearch.
У цій статті ми розповімо про те, як змусити ES працювати швидко з документами більш 100 Мб. Пошук в таких документах при підході "в лоб" займає десятки секунд. У нас вийшло зменшити цей час до 6 мс.
Зацікавлених просимо під кат.
Читати далі →

Хайлайтинг великих текстових полів ElasticSearch

У грудні 2016 року ми з товаришем почали займатися новим проектом — системою збору-індексації-пошуку по документам. Система побудована навколо ElasticSearch (далі — ES), який ми використовуємо як основний рушій для повнотекстового пошуку.
Цінними даними, набутими в ході роботи над проектом ми б хотіли поділитися з читачами в циклі статей про ES. Почнемо з основи будь-якого пошукача — підсвічування результатів пошуку (далі — хайлайтинг).
Правильна підсвічування результатів пошуку чи не найважливіший критерій ефективності пошукової системи для користувача. По-перше, видно логіка включення документа в результати пошуку, а по-друге, підсвічування блоку знайденого тексту дає можливість швидко оцінити контекст знайденого попадання.
Однією з ключових вимог до нашої пошуковій системі була можливість швидко і ефективно працювати з великими файлами (більше 100 Мб). У статті ми розповімо, як домогтися високої продуктивності від ES при хайлайтинге великих полів документа.
На скріншоті нижче показано як працює підсвічування результатів пошуку в нашому проекті.
Приклад результатів пошуку хайлайтом
Читати далі →

Firebase: прощання з ілюзіями

Маркетинг став частиною світу розробки. За кількістю зірочок на GitHub визначають, яке з схожих один на одного рішень крутіше, а за кількістю твітів можна спрогнозувати, яка технологія буде розвиватися в найближчі півроку. В таких умовах ми ризикуємо стати жертвами хайпи. Я — став: моє уявлення про Firebase розходилося з реальністю настільки сильно, що розуміння області застосування технології стало для мене справжнім одкровенням. Я хочу поділитися цим розумінням і тим, як все-таки використовувати Firebase правильно.



Читати далі →

Швидкий повнотекстовий пошук у Redmine

image redmine-logo
image elastic-logo
У нас використовується система управління проектами і завданнями Redmine. Ми продовжуємо допілівать її під свої потреби, щоб підвищити зручність роботи і розширити функціонал. Черговий завданням стало прискорення пошуку.

З тих пір як кількість завдань у Redmine зросла до кількох сотень тисяч, час на обробку пошукового запиту стало займати десятки секунд, що неприпустимо довго для нас. Тому ми вирішили запровадити повнотекстовий пошук на основі Elasticsearch. Про це і буде даний пост.

Читати далі →

Моніторинг Elasticsearch через біль і страждання


Ми нарешті допинали функціонал моніторингу elasticsearch до публічного релізу. Сумарно ми переробляли його три рази, так як результат нас не влаштовував і не показував проблеми, які ми огребали на нашому кластері ES.
Під катом історія про наш production кластер, наші проблеми та наш новий моніторинг ES.


Читати далі →

Як ми робили пошук в elasticsearch на vulners.com


Як ми писали раніше, в якості основної бази для пошуку на сайті використовується elasticsearch. Пошук в elastic працює дуже швидко і з коробки доступно багато корисних функцій для роботи з даними — повнотекстовий пошук, неточний пошук, всілякі методи агрегації і тд.

І на відміну від класичних SQL баз даних або noSQL типу MongoDB тут дуже зручно робити неточний пошук по всьому документу. Для цього використовується синтаксис Query DSL. Для повнотекстового пошуку по всьому документу є кілька пошукових запитів. У себе на сайті ми використовуємо тип query_string. Цей запит підтримує Lucene синтаксис, який дозволяє і нам, і користувачеві створювати складні запити в google-style. Ось приклади таких запитів:

title:apache AND title:vulnerability
type:centos cvss.score:[8 TO 10]
Можна зробити ось такий простий запит і все:

{
"query": {
"query_string": {
"query": "pws wordpress"
}
}
}

Але почавши вперше використовувати query_string, ви зіткнетеся з тим, що пошук видає не те, що ви хочете бачити. Як же домогтися від elasticsearch виразного результату пошуку?

Читати далі →

Plug-and-Get-Security I, моніторинг налаштувань TLS в гаю доменів

image
Безпечна настройка TLS завжди був головною біллю. Як для власників невеликих ресурсів, так і для компаній, розмір інфраструктури яких може досягати декількох сотень або навіть тисяч доменів. Проблеми з TLS\SSL з'являються постійно — уразливості в самих протоколах, крипто-алгоритмів або їх имплементациях. Від всім відомих Poodle і HeartBleed, до досить екзотичних і свіжих (CVE-2016-2107) проблем з AES-NI.
А до чого призводять проблеми з TLS?
До крадіжки облікових записів користувачів, адміністраторів, впровадження в трафік шкідливого контенту, реклами або, як це було з HeartBleed, навіть до прямого доступу до пам'яті сервера.
Давайте поглянемо на картину в цілому.
На липень 2016 за даними проекту SSL Pulse, який аналізує налаштування Alexa Top 200k доменів:
  • 40% з них мають помилки в конфігурації або використовують недостатньо стійкі набори алгоритмів шифрування
  • 25% мають серйозні проблеми призводять до реальної реалізації атак на користувачів ресурсів або на самі ресурси
А значить, у всіх нас проблеми!
Читати далі →

Gobetween Exec discovery+ Elasticsearch. L4 балансування з Node Data Discovery

Навіщо все це потрібно
Всі, хто використовував Elasticsearch каластер для своїх потреб (особливо для логування та як основну базу даних) на великих навантаженнях стикався з проблемами консистентности і масштабованості. Коли потрібно розпаралелити навантаження на Elasticsearch зазвичай застосовувалися статичні рішення то типу NGINX+Elasticsearch. Це дозволяє розпаралелювати навантаження, але виглядає не дуже гнучко. Особливо якщо врахувати що ноди можуть самі випадати з кластера і простий хелсчек покаже що все добре, а насправді нода перевантажена, виключена з кластера. У будь-якому випадку хотілося б мати дані про стан кластера з перших рук, а не задовольнятися простими перевірками.
Отже, приступимо до побудови балансування .
Як ми будемо це робити
В даному випадку ми будемо використовувати CAT node API, яке є частиною мощьнейшего CAT API, який є інструментом пошуку заголовків за Elasticsearch клстреру.
Ми будемо використовувати тільки Gobetween і вбудовані механізми Elasticsearch для балансування запису /читання СRUD (DATA) нсд при довільній кількості/статус нсд в кластері.
Читати далі →

Пошук по Postgres з використанням ZomboDb і elasticsearch

В якийсь момент розробки проекту постало питання пошуку за великою кількістю текстів. Причому, тексти мають різну довжину: від твітів до великих статей. Спочатку, основним пошуковим движком був обраний вбудований в Postgres _tsvector. Для пошуку по простих правилах його було цілком достатньо. Масив текстів зростав з великою швидкістю, а правила пошуку ускладнювалися, тому вбудований движок вже не покривав вимог.
Так, існує sphinx, у нього є відмінна інтеграція з Postgres, але була мета знайти рішення для використання elasticsearch з Postgres. Чому? elasticsearch показував хороші результати в деяких case-ах проекту. Та й вже був сервер з ним для зберігання логів logstash-а. Також було бажання знайти такий інструмент, який повністю візьме на себе синхронізацію даних.
В результаті на просторах мережі був знайдений проект ZomboDb, який якраз підходив під вимоги.
Читати далі →

Adminer — веб-інтерфейс для баз даних розміром в один .php файл



У світлі недавнього поста про порівняння PostgreSQL і MySQL, в коментарях виникла проблема вибору зручного інтерфейсу для роботи з постгресом. Я сам зіткнувся з такою проблемою, вирішивши пошукати альтернативи всім відомому phpMyAdmin / php*Admin, який вважається стандартом у веб-майстрів.

Читати далі →