1 of 23

Дмитрий Троян | troyan.dmitriy@gmail.com

2 of 23

О чем будем говорить?

  • Что такое Elasticsearch? Когда, кем и зачем создавался
  • В каких случаях стоит использовать Elasticsearch
  • Как это работает
  • Подробнее о поиске, фильтрации, агрегации
  • Какие ограничения накладывает использование Elasticsearch
  • Опыт использования в проекте
  • Ошибки, которых можно избежать

Дмитрий Троян | troyan.dmitriy@gmail.com

3 of 23

Shay Banon

Начало 2010 года - Elasticsearch 0.4

В 2012 была создана компания Elasticsearch BV для платной поддержки пользователей

В 2014 было привлечено $ 104 000 000 в виде инвестиций

Актуальная версия Elasticsearch 5.3

Дмитрий Троян | troyan.dmitriy@gmail.com

4 of 23

По порядку об Elasticsearch

Open Source

Распределенность

Масштабируемость

Высокая доступность

Документ-ориентированность

RESTful

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

Ответ в режиме близком к реальному времени

Дмитрий Троян | troyan.dmitriy@gmail.com

5 of 23

По порядку об Elasticsearch

Open Source

Распределенность

Масштабируемость

Высокая доступность

Документ-ориентированность

RESTful

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

Ответ в режиме близком к реальному времени

Apache 2.0 License

Свобода использования и внесения изменений!

https://github.com/elastic/elasticsearch

~22 000 stars и ~800 contributors

Дмитрий Троян | troyan.dmitriy@gmail.com

6 of 23

По порядку об Elasticsearch

Open Source

Распределенность

Масштабируемость

Высокая доступность

Документ-ориентированность

RESTful

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

Ответ в режиме близком к реальному времени

Дмитрий Троян | troyan.dmitriy@gmail.com

7 of 23

По порядку об Elasticsearch

Open Source

Распределенность

Масштабируемость

Высокая доступность

Документ-ориентированность

RESTful

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

Ответ в режиме близком к реальному времени

Дмитрий Троян | troyan.dmitriy@gmail.com

8 of 23

По порядку об Elasticsearch

Open Source

Распределенность

Масштабируемость

Высокая доступность

Документ-ориентированность

RESTful

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

Ответ в режиме близком к реальному времени

Дмитрий Троян | troyan.dmitriy@gmail.com

9 of 23

По порядку об Elasticsearch

Open Source

Распределенность

Масштабируемость

Высокая доступность

Документ-ориентированность

RESTful

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

Ответ в режиме близком к реальному времени

Дмитрий Троян | troyan.dmitriy@gmail.com

10 of 23

По порядку об Elasticsearch

Open Source

Распределенность

Масштабируемость

Высокая доступность

Документ-ориентированность

RESTful

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

Ответ в режиме близком к реальному времени

Дмитрий Троян | troyan.dmitriy@gmail.com

11 of 23

USE CASES

Дмитрий Троян | troyan.dmitriy@gmail.com

12 of 23

Что мы получаем из коробки

Дмитрий Троян | troyan.dmitriy@gmail.com

  • Огромные возможности для поиска документов
  • Около 50 видов агрегаций на все случаи жизни
  • Гео-поиск: geo shape, geo bounding, geo distance, geo polygon
  • Suggesters
  • Гибкая работа и настройка всего, что есть в Elasticsearch
  • И еще много чего!

13 of 23

С чего начать?

Дмитрий Троян | troyan.dmitriy@gmail.com

java -version�echo $JAVA_HOME

curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.0.tar.gz

tar -xvf elasticsearch-5.3.0.tar.gz�cd elasticsearch-5.3.0/bin

./elasticsearch

[2017-03-13 13:42:17,218][INFO ][node ] [New Goblin] version[5.3.0], pid[2085], build[5c03844/2017-02-25T15:52:53Z]�[2017-03-13 13:42:17,219][INFO ][node ] [New Goblin] initializing ...�[2017-03-13 13:42:17,223][INFO ][plugins ] [New Goblin] loaded [], sites []�[2017-03-13 13:42:19,831][INFO ][node ] [New Goblin] initialized�[2017-03-13 13:42:19,832][INFO ][node ] [New Goblin] starting ...�[2017-03-13 13:42:19,958][INFO ][transport ] [New Goblin] bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/192.168.8.112:9300]}�[2017-03-13 13:42:23,030][INFO ][cluster.service] [New Goblin] new_master [New Goblin][rWMtGj3dQouz2r6ZFL9v4g][mwubuntu1][inet[/192.168.8.112:9300]], reason: zen-disco-join (elected_as_master)�[2017-03-13 13:42:23,100][INFO ][discovery ] [New Goblin] elasticsearch/rWMtGj3dQouz2r6ZFL9v4g�[2017-03-13 13:42:23,125][INFO ][http ] [New Goblin] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/192.168.8.112:9200]}�[2017-03-13 13:42:23,629][INFO ][gateway ] [New Goblin] recovered [1] indices into cluster_state�[2017-03-13 13:42:23,630][INFO ][node ] [New Goblin] started

14 of 23

Установка в AWS

Дмитрий Троян | troyan.dmitriy@gmail.com

15 of 23

Основные понятия

Мир реляционных БД

Elasticsearch

База данных (Database)

Индекс (Index)

Таблица (Table)

Тип (Type)

Запись (Row)

Документ (Document)

Колонка (Column)

Поле (Field)

Схема (Schema)

Отображение (Mapping)

SQL

Query DSL

Дмитрий Троян | troyan.dmitriy@gmail.com

16 of 23

Кластер

Дмитрий Троян | troyan.dmitriy@gmail.com

17 of 23

Как выглядит поисковый запрос?

Дмитрий Троян | troyan.dmitriy@gmail.com

$ curl -XPOST 'http://localhost:9200/twitter/tweet' -d '{"user" : "kimchy","postDate" : "2009-11-15T14:12:12","message" : "trying out Elasticsearch"}'

$ curl -XGET 'http://localhost:9200/twitter/tweet/_search?q=user:kimchy'

$ curl -XPOST 'http://localhost:9200/twitter/tweet' -d '{"query" : {"term" : { "user" : "kimchy" }}}

'

{"_shards":{"total" : 5,"successful" : 5,"failed" : 0},"hits":{"total" : 1,"hits" : [{"_index" : "twitter","_type" : "tweet","_id" : "1","_source" : {"user" : "kimchy","postDate" : "2009-11-15T14:12:12","message" : "trying out Elasticsearch"}}]}}

18 of 23

Как используем Elasticsearch в проекте

Дмитрий Троян | troyan.dmitriy@gmail.com

Хранение сообщений и связанной информации

Поиск по вышеперечисленным сущностям

Хранение информации о файлах

Хранение комментариев к файлам

19 of 23

Грабли, шишки и другие… особенности

Дмитрий Троян | troyan.dmitriy@gmail.com

  • Внимательно читайте документацию
  • Продумайте маппинг заранее и как можно точнее
  • Релевантность поиска может быть нарушена при малых кол-вах документов
  • Расчет и ограничение нагрузки
  • Hardware
  • Используйте Kibana�

20 of 23

Производительность

https://esrally.readthedocs.io/en/latest/quickstart.html

Дмитрий Троян | troyan.dmitriy@gmail.com

21 of 23

Kibana

Дмитрий Троян | troyan.dmitriy@gmail.com

22 of 23

Дмитрий Троян | troyan.dmitriy@gmail.com

ВРЕМЯ ВОПРОСОВ

23 of 23