Elasticsearch учебник
Начало работы с Elasticsearch
Поиск…
замечания
Elasticsearch - это продвинутый сервер поиска с открытым исходным кодом на основе Lucene и написанный на Java.
Он предоставляет распределенные полнофункциональные и частично текстовые, поисковые и геолокационные функции поиска, доступные через HTTP REST API.
Версии
| Версия | Дата выхода |
|---|---|
| 5.2.1 | 2017-02-14 |
| 5.2.0 | 2017-01-31 |
| 5.1.2 | 2017-01-12 |
| 5.1.1 | 2016-12-08 |
| 5.0.2 | 2016-11-29 |
| 5.0.1 | 2016-11-15 |
| 5.0.0 | 2016-10-26 |
| 2.4.0 | 2016-08-31 |
| 2.3.0 | 2016-03-30 |
| 2.2.0 | 2016-02-02 |
| 2.1.0 | 2015-11-24 |
| 2.0.0 | 2015-10-28 |
| 1.7.0 | 2015-07-16 |
| 1.6.0 | 2015-06-09 |
| 1.5.0 | 2015-03-06 |
| 1.4.0 | 2014-11-05 |
| 1.3.0 | 2014-07-23 |
| 1.2.0 | 2014-05-22 |
| 1.1.0 | 2014-03-25 |
| 1.0.0 | 2014-02-14 |
Установка Elasticsearch на Ubuntu 14.04
Предпосылки
Для запуска Elasticsearch на компьютере требуется Java Runtime Environment (JRE). Elasticsearch требует Java 7 или выше и рекомендует Oracle JDK version 1.8.0_73 .
Установка Oracle Java 8
sudo add-apt-repository -y ppa:webupd8team/java
sudo apt-get update
echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | sudo debconf-set-selections
sudo apt-get install -y oracle-java8-installer
Проверить версию Java
java -version
Загрузка и установка пакета
Использование бинарников
- Загрузите последнюю стабильную версию Elasticsearch здесь .
- Разархивируйте файл & Run
Linux:
$ bin/elasticsearch
Использование apt-get
Альтернативой загрузке elasticsearch с веб-сайта является установка его, используя apt-get .
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list
sudo apt-get update && sudo apt-get install elasticsearch
sudo /etc/init.d/elasticsearch start
Установка elasticsearch версии 5.x
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
sudo apt-get update && sudo apt-get install elasticsearch
Выполнение службы в Linux:
После установки выше не запускается сама. поэтому нам нужно запустить его как услугу. Как запустить или остановить поиск Elasticsearch зависит от того, использует ли ваша система SysV init или systemd. вы можете проверить его с помощью следующей команды.
ps -p 1
Если ваш дистрибутив использует SysV init, вам нужно будет запустить:
sudo update-rc.d elasticsearch defaults 95 10
sudo /etc/init.d/elasticsearch start
В противном случае, если ваш дистрибутив использует systemd:
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
Запустите команду CURL из вашего браузера или клиента REST, чтобы проверить правильность установки Elasticsearch.
curl -X GET http://localhost:9200/
Установка Elasticsearch в Windows
Предпосылки
Версия Elicsearch для Windows можно получить по этой ссылке: https://www.elastic.co/downloads/elasticsearch . Последний стабильный релиз всегда наверху.
Когда мы устанавливаем в Windows, нам нужен архив .ZIP . Нажмите ссылку в разделе « Downloads: » и сохраните файл на своем компьютере.
Эта версия эластичной «портативной», то есть вам не нужно запускать установщик для использования программы. Распакуйте содержимое файла в удобное для вас место. Для демонстрации мы предположим, что вы распаковали все на C:\elasticsearch .
Обратите внимание, что по умолчанию архив содержит папку с именем elasticsearch-<version> , вы можете извлечь эту папку в C:\ и переименовать ее в elasticsearch или создать C:\elasticsearch самостоятельно, а затем распаковать только содержимое папки в архиве туда.
Поскольку Elasticsearch написан на Java, для его работы требуется среда выполнения Java. Поэтому перед запуском сервера проверьте, доступна ли Java, открыв командную строку и набрав:
java -version
Вы должны получить ответ, который выглядит так:
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) Client VM (build 25.91-b14, mixed mode)
Если вы видите следующее:
«java» не распознается как внутренняя или внешняя команда, операционная программа или командный файл.
Java не установлен в вашей системе или не настроен должным образом. Вы можете следовать этому руководству, чтобы (повторно) установить Java. Кроме того, убедитесь, что для этих переменных окружения заданы одинаковые значения:
| переменная | Значение |
|---|---|
| JAVA_HOME | C: \ Program Files \ Java \ jre |
| ДОРОЖКА | ...; C: \ Program Files \ Java \ jre |
Если вы еще не знаете, как проверить эти переменные, ознакомьтесь с этим руководством .
Запуск из командного файла
С установленной Java откройте папку bin . Его можно найти непосредственно в папке, в которую вы разархивировали все, поэтому она должна находиться в c:\elasticsearch\bin . Внутри этой папки находится файл elasticsearch.bat который можно использовать для запуска Elasticsearch в окне команд. Это означает, что информация, регистрируемая процессом, будет видна в окне командной строки. Чтобы остановить сервер, нажмите CTRL C или просто закройте окно.
Запуск в качестве службы Windows
В идеале вы не хотите иметь дополнительное окно, от которого вы не сможете избавиться во время разработки, и по этой причине Elasticsearch может быть настроен для работы в качестве службы.
Прежде чем мы смогли установить Elasticsearch в качестве сервиса, нам нужно добавить строку в файл C:\elasticsearch\config\jvm.options :
Установщик служб требует, чтобы настройки размера стека потоков были настроены в
jvm.optionsперед установкой службы. В 32-битной Windows вы должны добавить-Xss320k[...], а в 64-битной Windows вы должны добавить-Xss1mв файлjvm.options. [источник]
После того как вы сделали это изменение, откройте командную строку и перейдите в каталог bin , выполнив следующую команду:
C:\Users\user> cd c:\elasticsearch\bin
Управление услугами обрабатывается elasticsearch-service.bat . В старых версиях этот файл можно просто назвать service.bat . Чтобы просмотреть все доступные аргументы, запустите его без каких-либо:
C:\elasticsearch\bin> elasticsearch-service.bat
Usage: elasticsearch-service.bat install|remove|start|stop|manager [SERVICE_ID]
Результат также говорит нам, что есть необязательный аргумент SERVICE_ID , но мы можем его игнорировать пока. Чтобы установить службу, просто запустите:
C:\elasticsearch\bin> elasticsearch-service.bat install
После установки службы вы можете запустить и остановить ее с помощью соответствующих аргументов. Чтобы запустить службу, запустите
C:\elasticsearch\bin> elasticsearch-service.bat start
и остановить его, запустить
C:\elasticsearch\bin> elasticsearch-service.bat stop
Если вы предпочитаете использовать графический интерфейс для управления службой, вы можете использовать следующую команду:
C:\elasticsearch\bin> elasticsearch-service.bat manager
Это откроет Elastic Service Manager, который позволит вам настроить некоторые параметры, связанные с сервисом, а также остановить / запустить службу с помощью кнопок, расположенных в нижней части первой вкладки.
Индексирование и извлечение документа
Доступ к Elasticsearch осуществляется через HTTP REST API, обычно используя библиотеку cURL. Сообщения между сервером поиска и клиентом (ваше или ваше приложение) отправляются в виде строк JSON. По умолчанию Elasticsearch работает на порту 9200.
В приведенных ниже примерах добавлена ?pretty добавка, чтобы сообщить Elasticsearch о том, чтобы отменить ответ JSON. При использовании этих конечных точек в приложении вам не нужно добавлять этот параметр запроса.
Индексирующие документы
Если мы намерены обновлять информацию в индексе позже, рекомендуется назначить уникальные идентификаторы индексируемым документам. Чтобы добавить документ в индекс с именем megacorp , при запуске типа employee и ID 1 :
curl -XPUT "http://localhost:9200/megacorp/employee/1?pretty" -d'
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}'
Отклик:
{
"_index": "megacorp",
"_type": "employee",
"_id": "1",
"_version": 1,
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": true
}
Индекс создается, если он не существует, когда мы отправляем PUT-вызов.
Индексирование без идентификатора
POST /megacorp/employee?pretty
{
"first_name" : "Jane",
"last_name" : "Smith",
"age" : 32,
"about" : "I like to collect rock albums",
"interests": [ "music" ]
}
Отклик:
{
"_index": "megacorp",
"_type": "employee",
"_id": "AVYg2mBJYy9ijdngfeGa",
"_version": 1,
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
},
"created": true
}
Получение документов
curl -XGET "http://localhost:9200/megacorp/employee/1?pretty"
Отклик:
{
"_index": "megacorp",
"_type": "employee",
"_id": "1",
"_version": 1,
"found": true,
"_source": {
"first_name": "John",
"last_name": "Smith",
"age": 25,
"about": "I love to go rock climbing",
"interests": [
"sports",
"music"
]
}
}
Извлеките 10 документов из индекса megacorp с помощью employee типа:
curl -XGET "http://localhost:9200/megacorp/employee/_search?pretty"
Отклик:
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 1,
"hits": [
{
"_index": "megacorp",
"_type": "employee",
"_id": "1",
"_score": 1,
"_source": {
"first_name": "John",
"last_name": "Smith",
"age": 25,
"about": "I love to go rock climbing",
"interests": [
"sports",
"music"
]
}
},
{
"_index": "megacorp",
"_type": "employee",
"_id": "AVYg2mBJYy9ijdngfeGa",
"_score": 1,
"_source": {
"first_name": "Jane",
"last_name": "Smith",
"age": 32,
"about": "I like to collect rock albums",
"interests": [
"music"
]
}
}
]
}
}
Простой поиск с помощью match запроса, который выглядит для точных соответствий в соответствующем поле:
curl -XGET "http://localhost:9200/megacorp/employee/_search" -d'
{
"query" : {
"match" : {
"last_name" : "Smith"
}
}
}'
Отклик:
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.6931472,
"hits": [
{
"_index": "megacorp",
"_type": "employee",
"_id": "1",
"_score": 0.6931472,
"_source": {
"first_name": "John",
"last_name": "Smith",
"age": 25,
"about": "I love to go rock climbing",
"interests": [
"sports",
"music"
]
}
}
]
}
}
Основные параметры поиска с примерами:
По умолчанию полный проиндексированный документ возвращается как часть всех запросов. Это называется (источник _source поле поиска хитов). Если мы не хотим, чтобы весь исходный документ был возвращен, у нас есть возможность запросить только несколько полей из источника, которые будут возвращены, или мы можем установить _source на false, чтобы полностью опустить это поле.
В этом примере показано, как вернуть из поиска два поля: account_number и balance (внутри _source ):
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": { "match_all": {} },
"_source": ["account_number", "balance"]
}'
Обратите внимание, что приведенный выше пример просто уменьшает информацию, возвращаемую в поле _source . Он по-прежнему будет возвращать только одно поле с именем _source но будут включены только поля account_number и balance .
Если вы исходите из фона SQL, вышесказанное несколько похоже на концепцию SQL-запроса
SELECT account_number, balance FROM bank;
Теперь перейдем к части запроса. Ранее мы видели, как запрос match_all используется для соответствия всем документам. Давайте теперь представим новый запрос, называемый запросом соответствия, который можно рассматривать как базовый полевой поисковый запрос (т. Е. Поиск, выполненный против определенного поля или набора полей).
В этом примере возвращается учетная запись с account_number установленным в 20 :
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": { "match": { "account_number": 20 } }
}'
В этом примере возвращаются все учетные записи, содержащие термин «mill» в address :
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": { "match": { "address": "mill" } }
}'
В этом примере возвращаются все учетные записи, содержащие термин «mill» или «lane» в address :
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": { "match": { "address": "mill lane" } }
}'
Этот пример представляет собой вариант match ( match_phrase ), который разбивает запрос на термины и возвращает только документы, которые содержат все термины в address в тех же позициях относительно друг друга [1] .
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": { "match_phrase": { "address": "mill lane" } }
}'
Давайте теперь представим запрос bool (ean). Запрос bool позволяет нам составлять более мелкие запросы в более крупные запросы с использованием логической логики.
Этот пример содержит два совпадающих запроса и возвращает все учетные записи, содержащие «mill» и «lane» в адресе:
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": {
"bool": {
"must": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}'
В приведенном выше примере условие bool must указывать все запросы, которые должны быть истинными для документа, считающегося совпадением.
Напротив, этот пример составляет два совпадающих запроса и возвращает все учетные записи, содержащие «mill» или «lane» в address :
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": {
"bool": {
"should": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}'
В приведенном выше примере предложение bool should указывать список запросов, значение которых должно быть истинным для того, чтобы документ считался совпадением.
Этот пример составляет два совпадающих запроса и возвращает все учетные записи, которые не содержат ни «mill», ни «lane» в address :
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": {
"bool": {
"must_not": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}'
В приведенном выше примере предложение bool must_not указывает список запросов, ни один из которых не должен быть истинным для того, чтобы документ считался совпадением.
Мы можем объединить пункты must, should и must_not одновременно внутри запроса bool. Кроме того, мы можем составлять запросы bool в любом из этих предложений bool, чтобы имитировать любую сложную многоуровневую логическую логику.
В этом примере возвращаются все учетные записи, принадлежащие тем, кому ровно 40 лет, и не живут в Вашингтоне ( WA для краткости):
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": {
"bool": {
"must": [
{ "match": { "age": "40" } }
],
"must_not": [
{ "match": { "state": "WA" } }
]
}
}
}'
Установка Elasticsearch и Kibana на CentOS 7
Для запуска Elasticsearch на компьютере требуется Java Runtime Environment (JRE). Elasticsearch требует Java 7 или выше и рекомендует Oracle JDK version 1.8.0_73 .
Поэтому убедитесь, что в вашей системе есть Java. Если нет, выполните следующие действия:
# Install wget with yum
yum -y install wget
# Download the rpm jre-8u60-linux-x64.rpm for 64 bit
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u60-b27/jre-8u60-linux-x64.rpm"
# Download the rpm jre-8u101-linux-i586.rpm for 32 bit
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u101-b13/jre-8u101-linux-i586.rpm"
# Install jre-.*.rpm
rpm -ivh jre-.*.rpm
Java теперь должен быть установлен в вашей системе centOS. Вы можете проверить это с помощью:
java -version
Загрузить и установить elasticsearch
# Download elasticsearch-2.3.5.rpm
wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.3.5/elasticsearch-2.3.5.rpm
# Install elasticsearch-.*.rpm
rpm -ivh elasticsearch-.*.rpm
Запуск elasticsearch в качестве службы systemd при запуске
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
# check the current status to ensure everything is okay.
systemctl status elasticsearch
Установка Kibana
Первый импорт GPG-ключа на об / мин
sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
Затем создайте локальный репозиторий kibana.repo
sudo vi /etc/yum.repos.d/kibana.repo
Добавьте следующий контент:
[kibana-4.4]
name=Kibana repository for 4.4.x packages
baseurl=http://packages.elastic.co/kibana/4.4/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
Теперь установите кибану, выполнив команду:
yum -y install kibana
Начните с:
systemctl start kibana
Проверить статус с помощью:
systemctl status kibana
Вы можете запустить его в качестве службы запуска.
systemctl enable kibana