|
Праздничный эластик
|
|||
---|---|---|---|
#18+
Tags: #ElasticSearch, #Kibana, #ApacheLucene, #FullTextSearch, #DataVisualization Привет коллеги. С наступающими праздниками. Активности по текущему проекту закончились. И я получил некую творческую паузу. Что хотел сделать? Пока работал - изучал Elastic Stack. https://www.elastic.co/ Прошел пару вебинаров. Но в основном в разрезе индексирования логов на предмет анализа того что хотел кастомер. А хотел он просто понять какие из AWS APIGateway интерфейсов используются больше. И какие занимают больше времени процессинга для дальнейшей оптимизации ресурсов и собственно биллинга. Но это такое... не интересное. Логи - они и в африке логи. У меня возникли свои идеи. Немного по теме. Elastic Stack - достаточно разнообразен. Основу его составляет собствено elasticsearch service который можно считать ядром. Или центром. Реализованным как REST-сервис. Под капотом используется технология Lucene с которой я более менее знаком. По крайней мере знаю терминологию (Токенизаторы, анализаторы, стоп-слова и прочее). Основной его функционал - индексирование и быстрый поиск неструктурированных данных. Логи. Текстовые документы. CSV. И прочее. Имеет готовые шаблоны log-stash для втягивания в индекс стардартных Апачевых или Н-Джинксовых логов для дальнейшего поиска. Kibana - это UI который стыкуется с Эластик-Сервисом позволяет делать поиски и очень красиво представлять результат в виде графиков и диаграмм и таблиц. Поддерживаются различного рода аналитические запросы (вместо SQL там используется JSON-о подобный DSL). Например можно сделать гистограмму каких-то категорий или построить облако тегов. Графические можно виджеты собрать в дашборды и прочее. Вобщем всё как любит бизнес. Из дополнительных возможностей. Опция TimeLion - поддержка баз данных класса Time-Series, что говорит о более широкой интерпретации данных. Не только текст. Ну и самое главное. Есть обычные юзкейсы девелоперских поисковых запросов по анализу логов. Найти там все строки (документы в терминологии Kibana) где есть ERROR, Exception e.t.c. Интересующимся даю просто поисковую линку на картинки https://www.google.com/search?tbm=isch&q=kibana Собсно моя задача. Взять библиотеку книжек Флибуста. И проиндексировать их и посмотреть как оно работает. (возможно постановка выглядит сухой но я чуть позже по топику еще дополню). В настоящий момент библиотека Флибуста занимает порядка 270Гб архивов в формате zip в которых в свою очередь лежат книжки в fb2 (XML). Надеюсь что все не понадобятся. Но хоть какой-то процент Во времена наших эпичных споров с Студентом-Базистом я приводил в качестве исходных данных Либрусек (это клон этой библиотеки) в качестве исходных поисковых данных. Но мы к сожалению не продавили эту идею. Базист индексировал ПТ. Вобщем это пояснение откуда вылезла именно Флибуста Вобщем в этом разделе я буду тихо флудить на эту тему. Надеюсь меня не зобанят. Если кто имел продуктовый опыт работы с этой технологией - прошу каменты. Буду рад. А я буду думать потихоньку как впихнуть книжки в эту систему. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2019, 22:10 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
maytonВзять библиотеку книжек Флибуста. И проиндексировать их и посмотреть как оно работает. А никак. Надо не просто индексировать, а выявлять структуру во входных данных, что делается вручную. И только выявив структуру можно как-то мапить её на ту хрень, которую данная система позволяет "красиво" рисовать. Где в художественных текстах структура? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2019, 11:48 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
Да. Он - структурируется. Вот образец 1 книжки. Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.
Здесь дофига букв. И я приведу фрагмент основного текста. Все что ограничено тегом <body> Код: xml 1. 2. 3. 4. 5. 6. 7. 8.
Чтобы втолкнуть это в эластик через PUT мне надо будет все структурные основные элементы преобразовать в поля JSON-документа. Грубо говоря - конвертнуть XML-to-JSON. Возможно надо будет по ходу сделать зачистку. Есть масса информации которой я не нахожу применения. Внедрённые картинки например в формате base64. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 01:11 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
Я думаю сделаю так. FB2(XML) -> Fb2(JavaObject) -> Fb2(JsonElasticPutRequest) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 01:14 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
maytonЯ думаю сделаю так. FB2(XML) -> Fb2(JavaObject) -> Fb2(JsonElasticPutRequest) Пока цель непонятна - можно делать как угодно. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 12:37 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
Цель описана в первом посте. Мне пока добавить нечего. Буду рад в топике слышать энтузиастов текстового поиска и пользователей Elastic Stack. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 19:27 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
> И проиндексировать их и посмотреть как оно работает. Цель непонятна совсем. Я выполнял это упражнение с разными FTS движками: - lucene (то что внутри elasticsearch) - blevesearch - tantivy-search - встроенный в sql-lite fts Но исходя из практических соображений остановился на индексировании inpx файла и встроенного в sql-lite fts движка, потому-что помимо индекса удобнее еще иметь и реалиционую базу. Но UI делал свой. Kibana IMHO не подойдет. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 15:20 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
kolchanovЯ выполнял это упражнение с разными FTS движками: - lucene (то что внутри elasticsearch) - blevesearch - tantivy-search - встроенный в sql-lite fts Спасибо за инфу. Я работал какое-то время с SQLite. По моему она ограничена оперативкой. Мне надо будет прогрузить пол-терабайта текста. Поэтому тут - вопросы. А вот по поводу blevesearch, tantivy-search я не вкурсе. И соотв вопросы - кто производитель. Какова лицензия. И есть ли публичный API разработки. В своё время я искал и находил поисковых движков текста очень мало доступного API. Из отечественных разработок есть еще Сфикс. Написан на сях. Не пробовал его. Мало также информации о возможностях. Люсин более-менее документирован и расширяется свомим же сообществом (анализаторы Snowball и прочее) то другие движки либо слабо документированы либо просто представляют собой коробочный продукт. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 15:28 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
maytonСпасибо за инфу. Я работал какое-то время с SQLite. По моему она ограничена оперативкой. Мне надо будет прогрузить пол-терабайта текста. Поэтому тут - вопросы. Не ограничена. Там такая же страничная организация как во взрослых СУБД. Тут 21680375 баловался с SQLite, после небольшого тюнинга работает очень быстро, естественно жертвуем надежностью в угоду производительности. При заполнении с нуля это вполне применимо. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 15:35 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
Dima TmaytonСпасибо за инфу. Я работал какое-то время с SQLite. По моему она ограничена оперативкой. Мне надо будет прогрузить пол-терабайта текста. Поэтому тут - вопросы. Не ограничена. Там такая же страничная организация как во взрослых СУБД. Тут 21680375 баловался с SQLite, после небольшого тюнинга работает очень быстро, естественно жертвуем надежностью в угоду производительности. При заполнении с нуля это вполне применимо. ОК. Попробуем. Не задача прим - но тоже поинт. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 15:41 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
mayton, blevesearch.com - Лицензия Apache, написано на go, расширяема анализаторами Используется внутри NoSQL базы Couchbase API документировано хорошо. Production ready tantivy-search - попытка реализовать fts близкий к lucene на rust Лицензия Apache, главное преимущество - хорошая производительность ИМХО к production не готово. >Я работал какое-то время с SQLite. По моему она ограничена оперативкой. Это не так. Ограничение - 140 терабайт. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 15:43 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
kolchanovblevesearch.com - Лицензия Apache, написано на go, расширяема анализаторами Используется внутри NoSQL базы Couchbase API документировано хорошо. Production ready Это - мегакруто. Попробуем. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 15:49 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
Вчера написал некий макет будет называться flibusta-loader. Или indexer. Он уже ходит по этим zip архивам. Извлекает документы и толкает в ендпоинт. Естественно валится по http-ошибке. Ендпоинта пока еще нет. Уже написав приложение я понял что оно по сути является кандидатом на миграцию в spring batch приложение. Там есть ярко выраженные Jobs, Steps. Как это я себе вижу архитектурно. 1) Поднимаем эластик локально. Он будет слушать 9200 как основной рест-порт индексатора. 2) Под индекс я уже подготовил блинчик. На 500Гб. Это мой старый WD серии BLUE. Не такой быстрый как эти ваши SSD но тут размер важен. Щас блинчик порезан на партишены по 64Гб. У меня они выглядят как /dev/sdc1, sdc2 ... Первый из них у меня отформатирован под BtrFS (это творческий эксперимент. Я до этого с БТРФС не работал но интересно пощупать ее в программных JBOD и горячих растягиваниях на ходу без отмонтирования) и смонтирован как фолдер /nosql. Сюда-же надо сконфигурить destination индекс фолдер эластика. Не знаю как это сделать пока. Но думаю что в крайнем случае сделаю симлинк на директорию. Как только первый полностью заполнится я попробую на ходу его натянуть на глобус растянуть на следующий раздел. Не потому что я жадный до дисков. Просто из любопытства попробоать фичу. И желательно при этом процесс не останавливать. Когда наразвлекаюсь отформатирую обратно на 1 раздел. 3) Кибана . От нее вобщем-то ничего не требуется кроме графического UI. Я ее подниму в докере. Эластик я поднимаю локально именно по причине предполагаемых накладных расходов в 270 гигов на хранилище. Так бы всё поднял в докерах. Кибана поднимается с портом 5601. Он пробрасывается докером Открытый вопрос пока. Куда толкать индексируемые документы? В эластик или кибану? Я думаю что можно и туда и сюда. Но кибана вроде-бы предлагает более широкий API. Кто знает - поделитесь. 4) SQLite, Blevsearch. - я пока говрю я пас. Всё не успею. Но я попробую реализовать приложение так чтобы движок индексатора был плагином по отношению к загрузчику. По шаблону "strategy" или "adaptor" или еще как-нибудь. Без каких-то ужасных изменений в коде. Primary goal: загрузить флибусту в эластик и нарисовать несколько отчотов и запросов из кибаны. Secondary goals: Spring Batch на аннотациях, надо проверить. И посмотреть как растягивается этот БТР-ФС на ходу. по горячему режиму. По спринг батчу. Еще хотел проверить режим возобновления джоба. Это тот кейс когда их 270 гигов прогрузилось порядка 150 гигов и я не хочу начинать загрузку сначала. ( Реализуется это подключением внешней БД через JDBC. Там создается схема на 5 штук табличек и они трекают джобы таски и степы ). В моём случае я ограничусь H2. А продолжить загрузку с какой-то точки. На прошлых проектах мне приходилось работать со СпрингБатчом много и плотно только мы конфигурили его на XML. Такой себе олд-скульных Спринг. Еще забавный рекурсивный парадокс. Логи процесса загрузки можно... тоже положить в еластик. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2019, 12:47 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
mayton Primary goal: загрузить флибусту в эластик и нарисовать несколько отчотов и запросов из кибаны. На самом деле цель, очевидно, прокрутить 270 гб и получить драйв. Но 270 гб - это неструктурированный текст. Поэтому после его прокрутки на выходе будут лишь названия да всякие аннотации, а большая часть 270 гб уйдёт в корзину с мусором. Реально информации будет где-то меньше гигабайта, так что зачем весь остальной мусор тягать - непонятно. И драйв несколько уменьшится после понимания этого простого факта. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2019, 13:42 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
alex55555mayton Primary goal: загрузить флибусту в эластик и нарисовать несколько отчотов и запросов из кибаны. На самом деле цель, очевидно, прокрутить 270 гб и получить драйв. Но 270 гб - это неструктурированный текст. Поэтому после его прокрутки на выходе будут лишь названия да всякие аннотации, а большая часть 270 гб уйдёт в корзину с мусором. Реально информации будет где-то меньше гигабайта, так что зачем весь остальной мусор тягать - непонятно. И драйв несколько уменьшится после понимания этого простого факта. Год назад я индексировал библиотекой Apache Lucene биржевые сообщений формата FIX. Это - текст разделенный спец-символами. Типа property-file в 1 строку. И у меня выходила пропорция вроде 40% объем индекса на 100% объема самих сообщений в виде символов. Объем я посчитал SELECT SUM(LENGT()) по базе. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2019, 13:49 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
Так 9200 порт уже поднят. Правда elastic как-то поставился хитро. Как сервис. На винду я ставил проще. Ну ладно. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2019, 15:16 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
maytonГод назад я индексировал библиотекой Apache Lucene биржевые сообщений формата FIX. Просто индексация текста отличается от парсинга fb2. Для индексации достаточно потока, вырезающего xml-ные теги. А структура fb2 нужна для каких-то других целей. Для каких? Никто не знает. Надо сначала достаточно полно поставить цель. Для цели "просто текст проиндексировать" - вижу кучу лишних действий. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2019, 12:37 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
alex55555maytonГод назад я индексировал библиотекой Apache Lucene биржевые сообщений формата FIX. Просто индексация текста отличается от парсинга fb2. Для индексации достаточно потока, вырезающего xml-ные теги. А структура fb2 нужна для каких-то других целей. Для каких? Никто не знает. Надо сначала достаточно полно поставить цель. Для цели "просто текст проиндексировать" - вижу кучу лишних действий. Я открыт к предложениям. Но сначала по юзкейсам. 1) Пользователь указывает Код: sql 1.
и получает список всех книг данного автора 2) Пользователь указывает фразу "Антон Городецкий" и находит список всех книг всех авторов за все годы где в тексте произведения есть сочетанеи токенов антон и городецкий . Релевантность тоже учитывается. Наверх должны поднятся книги в которых есть пересечение токенов. Навер поднимаются книги где их - максимум. Вниз соотв опускаются книги где присутствует только 1 из 2 токенов. 3) Различные композиции условий. Пользователь ищет Все издания Сергея Лукьяненко до 1990 года. Код: sql 1.
4) Точные поиски. Пользователь ищет книгу по ISBN: Код: sql 1.
Здесь - работает классический точный поиск как в базах данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2019, 12:55 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
mayton1) Пользователь указывает Код: sql 1.
и получает список всех книг данного автора Для этого индексируем отдельно только элемент author. mayton2) Пользователь указывает фразу "Антон Городецкий" и находит список всех книг всех авторов за все годы где в тексте произведения есть сочетанеи токенов антон и городецкий . Релевантность тоже учитывается. Наверх должны поднятся книги в которых есть пересечение токенов. Навер поднимаются книги где их - максимум. Вниз соотв опускаются книги где присутствует только 1 из 2 токенов. Это обычная индексация текстов, здесь просто вырезание тегов отлично сработает. mayton3) Различные композиции условий. Пользователь ищет Все издания Сергея Лукьяненко до 1990 года. Код: sql 1.
Здесь добавляем индекс по дате, при чём не полнотекстовой, а просто упорядоченный массив строк со ссылками на источник. mayton4) Точные поиски. Пользователь ищет книгу по ISBN: Код: sql 1.
Здесь - работает классический точный поиск как в базах данных. То же, что и с датой, но без шаблонов. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2019, 12:02 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
alex55555Это обычная индексация текстов, здесь просто вырезание тегов отлично сработает. Зачем мне вырезать теги? У меня есть соввершенно точная позиция <body></body> и есть XPath выражение value-of которое это туловище выбирает точно как мне надо. Я не хотел-бы включать в бади постороние символы такие как ISBN издательства и прочее. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2019, 12:21 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
alex55555Здесь добавляем индекс по дате, при чём не полнотекстовой, а просто упорядоченный массив строк со ссылками на источник. Я пока работаю в парадигме elastic. Как в нем создать 2 и более индекса по одному домену документов - я не знаю. Но я открыт к вашим предложениям. И разумется я буду отдавать приоритет коду. Покажите мне ваш код. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2019, 12:23 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
maytonЗачем мне вырезать теги? У меня есть соввершенно точная позиция <body></body> и есть XPath Здесь "вырезать" означает любым образом убрать. Если хочется xpath - пусть будет xpath. Но он полностью грузит весь документ, что для памяти не очень хорошо. Хотя книжки больше 10МБ вряд ли встречаются в природе, так что можно и не особо жалеть, памяти всё равно хватит. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2019, 15:01 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
maytonЯ пока работаю в парадигме elastic. ... Покажите мне ваш код. Да не интересовал меня этот эластик. Всяких визуализаторов в мире полно, зачем мне именно этот? Ну и кода под него нет, понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2019, 15:02 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
alex55555maytonЯ пока работаю в парадигме elastic. ... Покажите мне ваш код. Да не интересовал меня этот эластик. Всяких визуализаторов в мире полно, зачем мне именно этот? Ну и кода под него нет, понятно. Это не визуализатор. Это текстовый индекс. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2019, 16:01 |
|
Праздничный эластик
|
|||
---|---|---|---|
#18+
maytonЭто не визуализатор. Это текстовый индекс. Ну да, перепутал с кибаной... Вообще без визуализации любая искалка по текстам превращается в недоделанный гугл, который никому не нужен. А вот обвешенная красивостями, она становится полезной в той или иной задаче. Поэтому на мой взгляд важнее визуализация, нежели довольно примитивные по сравнению с поисковиками возможности полнотекстового поиска. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2019, 12:12 |
|
|
start [/forum/topic.php?fid=16&fpage=10&tid=1339949]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 232ms |
total: | 391ms |
0 / 0 |