Практика
Установка
Установить можно через docker-контейнер
Проверяем работоспособность:
# для удобства запомним адрес в переменную
#export ES_URL=$(docker-machine ip dev):9200
export ES_URL=localhost:9200
curl -X GET $ES_URLПример ответа:
{
"name" : "Heimdall",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "2.2.1",
"build_hash" : "d045fc29d1932bce18b2e65ab8b297fbf6cd41a1",
"build_timestamp" : "2016-03-09T09:38:54Z",
"build_snapshot" : false,
"lucene_version" : "5.4.1"
},
"tagline" : "You Know, for Search"
}Использование
Добавление данных
На примере постов
Ответ сервера
ES автоматически создал индекс blog и тип post. Можно провести условную аналогию: индекс — это база данных, а тип — таблица в этой БД. Каждый тип имеет свою схему — mapping, также как и реляционная таблица. Mapping генерируется автоматически при индексации документа:
Пример ответа (комменты автора):
Стоит отметить, что ES не делает различий между одиночным значением и массивом значений. Например, поле title содержит просто заголовок, а поле tags — массив строк, хотя они представлены в mapping одинаково. Позднее мы поговорим о маппинге более подобно.
Запросы
Извлечение документа по его id
В ответе появились новые ключи: _version и _source. Вообще, все ключи, начинающиеся с _ относятся к служебным.
Ключ _version показывает версию документа. Он нужен для работы механизма оптимистических блокировок. Например, мы хотим изменить документ, имеющий версию 1. Мы отправляем измененный документ и указываем, что это правка документа с версией 1. Если кто-то другой тоже редактировал документ с версией 1 и отправил изменения раньше нас, то ES не примет наши изменения, т.к. он хранит документ с версией 2.
Ключ _source содержит тот документ, который мы индексировали. ES не использует это значение для поисковых операций, т.к. для поиска используются индексы. Для экономии места ES хранит сжатый исходный документ. Если нам нужен только id, а не весь исходный документ, то можно отключить хранение исходника.
Если нам не нужна дополнительная информация, можно получить только содержимое _source:
Также можно выбрать только определенные поля:
Сортировка
Фильтры и запросы
Используем запрос range в контексте filter:
Фильтрация по тегам
Используем term query для поиска id документов, содержащих заданное слово:
Полнотекстовый поиск
Используем match query для поиска id документов, содержащих заданное слово:
Анализаторы
Анализаторы нужны, чтобы преобразовать исходный текст в набор токенов.
В ES есть несколько стандартных анализаторов. Например, анализатор russian.
Соотв, можно писать свои анализаторы и преобразователи, которые как-то обрабатывают данные на стороне elastic.
Полнотекстовый поиск с поддержкой выражений
Запрос может содержать специальные символы, например:
Синтаксис запроса:
Last updated