Шпаргалка ElasticSearch: установка через Docker + основные команды
Под катом небольшая шпаргалка по ElasticSearch..
Установка ElasticSearch через Docker
docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
version: '3' services: elasticsearch: image: 'elasticsearch:6.6.0' restart: always environment: - discovery.type=single-node ports: - '9200:9200' - '9300:9300' |
Запуск
1 2 3 |
docker-compose up |
Использование ElasticSearch
Создание индекса (маппинг)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
PUT my_index { "mappings": { "_doc": { "properties": { "title": { "type": "text" }, "name": { "type": "text" }, "age": { "type": "integer" }, "created": { "type": "date", "format": "strict_date_optional_time||epoch_millis" } } } } } |
Создание уникальной записи
1 2 3 4 5 6 7 8 9 10 11 |
PUT localhost:9200/test_index/_doc/1/_create { "title": "Hello world", "category":"Main", "author":{ "first_name": "John", "last_name": "Doe" } } |
Добавление/обновление записи
1 2 3 4 5 6 7 8 9 10 11 |
PUT localhost:9200/test_index/_doc/2 { "title": "Hello awesome world ", "category":"Main", "author":{ "first_name": "John", "last_name": "Doe" } } |
Удаление записи
1 2 3 |
DELETE localhost:9200/test_index/_doc/2 |
Поиск всех записей
1 2 3 |
GET localhost:9200/test_index/_search |
Поиск слов
Поиск слов по полю title
1 2 3 4 5 6 7 8 9 10 |
GET localhost:9200/test_index/_search { "query": { "match": { "title": "hello" } } } |
Поиск слов ("любое из слов", порядок не важен) по полю title
1 2 3 4 5 6 7 8 9 10 |
GET localhost:9200/test_index/_search { "query": { "match": { "title": "world hello" } } } |
Поиск слов ("все слова из запроса", порядок не важен) по полю title
1 2 3 4 5 6 7 8 9 10 11 12 13 |
GET localhost:9200/test_index/_search { "query": { "match": { "title":{ "query": "world awesome", "operator": "and" } } } } |
Поиск слов ("минимум 2 слова из запроса", порядок не важен) по полю title
1 2 3 4 5 6 7 8 9 10 11 12 13 |
GET localhost:9200/test_index/_search { "query": { "match": { "title":{ "query": "world awesome hello", "minimum_should_match": 2 } } } } |
Поиск через GET параметры по полю title
1 2 3 |
localhost:9200/test_index/_search?q=title:(world AND awesome) |
Поиск фразы
Поиск фразы ("все слова из запроса", порядок важен) по полю title
1 2 3 4 5 6 7 8 9 10 11 12 |
GET localhost:9200/test_index/_search { "query": { "match_phrase": { "title":{ "query": "hello world" } } } } |
Поиск фразы ("все слова из запроса", порядок важен, допустимо одно слово между словами запросами) по полю title
1 2 3 4 5 6 7 8 9 10 11 12 13 |
GET localhost:9200/test_index/_search { "query": { "match_phrase": { "title":{ "query": "hello world", "slop": 1 } } } } |
Поиск фразы через GET параметры по полю title
1 2 3 |
localhost:9200/test_index/_search?q=title:"hello world"~1 |
Поиск по дате
Поиск по дате, в поле publish_date
1 2 3 4 5 6 7 8 9 10 11 12 13 |
GET localhost:9200/test_index/_search { "query": { "range": { "publish_date":{ "gte": "2019-01-01", "lt": "2019-02-01" } } } } |
Управление оценкой поиска (bool query)
- must = запрос должен быть в результатах поиска и влияет на оценку _score
- must_not = запроса не должно быть в результатах поиска
- should = запрос не обязательно должен быть в результатах поиска, наличие запроса влияет на оценку _score
- filter = запрос должен быть в результатах поиска, но не влияет на оценку _score
Структура
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
GET localhost:9200/test_index/_search { "query": { "bool": { "must":[ {} ], "must_not":[ {} ], "should":[ {} ], "filter":[ {} ] } } } |
Поиск title включающий "hello", но не включающий "awesome"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
GET localhost:9200/test_index/_search { "query": { "bool": { "must":{ "match": { "title": "hello" } }, "must_not":{ "match": { "title": "awesome" } } } } } |
Поиск title включающий "hello" + повышенный _score для включающих "awesome"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
GET localhost:9200/test_index/_search { "query": { "bool": { "must":{ "match": { "title": "hello" } }, "should":{ "match": {"title": "awesome"} } } } } |
Обратите внимание, что при таком запросе:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
GET localhost:9200/test_index/_search { "query": { "bool": { "must":{ "match": { "title": "hello" } }, "should":[ {"match": {"title": "awesome"}}, {"match": {"title": "world"}} ] } } } |
к набору:
1 2 3 4 5 |
Hello world Hello awesome world Hello something world |
"Hello awesome world" будет иметь наименьший _score.
Author: | Tags: /
| Rating:
Leave a Reply