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

Основные параметры поиска с примерами:

По умолчанию полный проиндексированный документ возвращается как часть всех запросов. Это называется (источник _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 осуществляется через 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"
          ]
        }
      }
    ]
  }
}

 

Установка 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
 

Установка 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
 

Загрузка и установка пакета

Использование бинарников

  1. Загрузите последнюю стабильную версию Elasticsearch здесь .
  2. Разархивируйте файл & 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, который позволит вам настроить некоторые параметры, связанные с сервисом, а также остановить / запустить службу с помощью кнопок, расположенных в нижней части первой вкладки.