Учебники

Elasticsearch — Краткое руководство

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

Elasticsearch — это поисковый сервер на основе Apache Lucene. Он был разработан Shay Banon и опубликован в 2010 году. В настоящее время поддерживается Elasticsearch BV. Последняя версия — 2.1.0.

Elasticsearch — это механизм полнотекстового поиска и анализа в реальном времени с открытым исходным кодом. Он доступен из интерфейса веб-службы RESTful и использует документы без схемы JSON (JavaScript Object Notation) для хранения данных. Он построен на языке программирования Java, что позволяет Elasticsearch работать на разных платформах. Это позволяет пользователям исследовать очень большой объем данных с очень высокой скоростью.

Elasticsearch — Общие характеристики

Общие черты Elasticsearch следующие:

  • Elasticsearch масштабируется до петабайт структурированных и неструктурированных данных.

  • Elasticsearch может использоваться в качестве замены хранилищ документов, таких как MongoDB и RavenDB.

  • Elasticsearch использует денормализацию для улучшения производительности поиска.

  • Elasticsearch — одна из популярных поисковых систем для предприятий, которая в настоящее время используется многими крупными организациями, такими как Википедия, The Guardian, StackOverflow, GitHub и т. Д.

  • Elasticsearch имеет открытый исходный код и доступен под лицензией Apache версии 2.0.

Elasticsearch масштабируется до петабайт структурированных и неструктурированных данных.

Elasticsearch может использоваться в качестве замены хранилищ документов, таких как MongoDB и RavenDB.

Elasticsearch использует денормализацию для улучшения производительности поиска.

Elasticsearch — одна из популярных поисковых систем для предприятий, которая в настоящее время используется многими крупными организациями, такими как Википедия, The Guardian, StackOverflow, GitHub и т. Д.

Elasticsearch имеет открытый исходный код и доступен под лицензией Apache версии 2.0.

Elasticsearch — Ключевые понятия

Ключевые понятия Elasticsearch следующие:

  • Узел — относится к одному запущенному экземпляру Elasticsearch. Один физический и виртуальный сервер вмещает несколько узлов в зависимости от возможностей их физических ресурсов, таких как оперативная память, память и вычислительная мощность.

  • Кластер — это набор из одного или нескольких узлов. Кластер предоставляет возможности коллективного индексирования и поиска по всем узлам для всех данных.

  • Индекс — это коллекция документов различного типа и свойств документа. Индекс также использует концепцию осколков для повышения производительности. Например, набор документов содержит данные приложения для социальных сетей.

  • Тип / отображение — это набор документов, использующих набор общих полей, присутствующих в одном и том же индексе. Например, индекс содержит данные приложения социальной сети, и тогда может быть определенный тип данных профиля пользователя, другой тип данных обмена сообщениями и другой тип данных комментариев.

  • Документ — это набор полей определенным образом, определенный в формате JSON. Каждый документ принадлежит к типу и находится внутри индекса. Каждый документ связан с уникальным идентификатором, называемым UID.

  • Осколок — Индексы горизонтально подразделяются на осколки. Это означает, что каждый шард содержит все свойства документа, но содержит меньше объектов JSON, чем индекс. Горизонтальное разделение делает шард независимым узлом, который можно хранить в любом узле. Первичный осколок является исходной горизонтальной частью индекса, а затем эти первичные осколки реплицируются в осколки реплики.

  • Реплики — Elasticsearch позволяет пользователю создавать реплики своих индексов и шардов. Репликация не только помогает повысить доступность данных в случае сбоя, но и повышает производительность поиска, выполняя параллельную операцию поиска в этих репликах.

Узел — относится к одному запущенному экземпляру Elasticsearch. Один физический и виртуальный сервер вмещает несколько узлов в зависимости от возможностей их физических ресурсов, таких как оперативная память, память и вычислительная мощность.

Кластер — это набор из одного или нескольких узлов. Кластер предоставляет возможности коллективного индексирования и поиска по всем узлам для всех данных.

Индекс — это коллекция документов различного типа и свойств документа. Индекс также использует концепцию осколков для повышения производительности. Например, набор документов содержит данные приложения для социальных сетей.

Тип / отображение — это набор документов, использующих набор общих полей, присутствующих в одном и том же индексе. Например, индекс содержит данные приложения социальной сети, и тогда может быть определенный тип данных профиля пользователя, другой тип данных обмена сообщениями и другой тип данных комментариев.

Документ — это набор полей определенным образом, определенный в формате JSON. Каждый документ принадлежит к типу и находится внутри индекса. Каждый документ связан с уникальным идентификатором, называемым UID.

Осколок — Индексы горизонтально подразделяются на осколки. Это означает, что каждый шард содержит все свойства документа, но содержит меньше объектов JSON, чем индекс. Горизонтальное разделение делает шард независимым узлом, который можно хранить в любом узле. Первичный осколок является исходной горизонтальной частью индекса, а затем эти первичные осколки реплицируются в осколки реплики.

Реплики — Elasticsearch позволяет пользователю создавать реплики своих индексов и шардов. Репликация не только помогает повысить доступность данных в случае сбоя, но и повышает производительность поиска, выполняя параллельную операцию поиска в этих репликах.

Elasticsearch — Преимущества

  • Elasticsearch разработан на Java, что делает его совместимым практически на любой платформе.

  • Elasticsearch в режиме реального времени, другими словами, через одну секунду добавленный документ доступен для поиска в этом движке.

  • Elasticsearch распространяется, что позволяет легко масштабировать и интегрировать в любую крупную организацию.

  • Создание полных резервных копий легко с использованием концепции шлюза, которая присутствует в Elasticsearch.

  • Работа с несколькими арендаторами очень проста в Elasticsearch по сравнению с Apache Solr.

  • Elasticsearch использует объекты JSON в качестве ответов, что позволяет вызывать сервер Elasticsearch с большим количеством различных языков программирования.

  • Elasticsearch поддерживает практически все типы документов, кроме тех, которые не поддерживают рендеринг текста.

Elasticsearch разработан на Java, что делает его совместимым практически на любой платформе.

Elasticsearch в режиме реального времени, другими словами, через одну секунду добавленный документ доступен для поиска в этом движке.

Elasticsearch распространяется, что позволяет легко масштабировать и интегрировать в любую крупную организацию.

Создание полных резервных копий легко с использованием концепции шлюза, которая присутствует в Elasticsearch.

Работа с несколькими арендаторами очень проста в Elasticsearch по сравнению с Apache Solr.

Elasticsearch использует объекты JSON в качестве ответов, что позволяет вызывать сервер Elasticsearch с большим количеством различных языков программирования.

Elasticsearch поддерживает практически все типы документов, кроме тех, которые не поддерживают рендеринг текста.

Elasticsearch — недостатки

  • Elasticsearch не имеет многоязычной поддержки с точки зрения обработки данных запросов и ответов (возможно только в JSON) в отличие от Apache Solr, где это возможно в форматах CSV, XML и JSON.

  • Elasticsearch также имеют проблемы с разделением головного мозга, но в редких случаях.

Elasticsearch не имеет многоязычной поддержки с точки зрения обработки данных запросов и ответов (возможно только в JSON) в отличие от Apache Solr, где это возможно в форматах CSV, XML и JSON.

Elasticsearch также имеют проблемы с разделением головного мозга, но в редких случаях.

Сравнение между Elasticsearch и RDBMS

В Elasticsearch индекс представляет собой набор типов, так же как база данных представляет собой набор таблиц в RDBMS (Relation Database Management System). Каждая таблица представляет собой набор строк, так же как каждое отображение представляет собой набор объектов JSON Elasticsearch.

Elasticsearch RDBMS
Индекс База данных
осколок осколок
картографирование Таблица
поле поле
JSON Object Кортеж

Elasticsearch — Установка

Шаги для установки Elasticsearch следующие:

Шаг 1 — Проверьте минимальную версию вашего Java в установленном на вашем компьютере, это должна быть Java 7 или более обновленная версия. Вы можете проверить, выполнив следующее —

В операционной системе Windows (ОС) (с использованием командной строки) —

> java -version

В ОС UNIX (с использованием терминала) —

$ echo $JAVA_HOME

Шаг 2 — Загрузите Elasticsearch с www.elastic.co

  • Для ОС Windows загрузите ZIP-файл.
  • Для ОС UNIX скачайте файл TAR.
  • Для ОС Debian скачайте файл DEB.
  • Для Red Hat и других дистрибутивов Linux загрузите файл RPN.
  • Утилиты APT и Yum также можно использовать для установки Elasticsearch во многих дистрибутивах Linux.

Шаг 3 — Процесс установки Elasticsearch очень прост и описан ниже для разных ОС —

  • ОС Windows — разархивируйте zip-пакет, и Elasticsearch будет установлен.

  • ОС UNIX — Извлеките tar-файл в любом месте, и Elasticsearch установлен.

ОС Windows — разархивируйте zip-пакет, и Elasticsearch будет установлен.

ОС UNIX — Извлеките tar-файл в любом месте, и Elasticsearch установлен.

$tar –xvf elasticsearch-2.1.0.tar.gz
  • Использование утилиты APT для ОС Linux

    • Загрузите и установите открытый ключ подписи —

Использование утилиты APT для ОС Linux

Загрузите и установите открытый ключ подписи —

$ wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
    • Сохраните определение хранилища —

Сохраните определение хранилища —

$ echo "deb http://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
  • Использование утилиты YUM для ОС Debian Linux

    • Загрузите и установите открытый ключ подписи —

Использование утилиты YUM для ОС Debian Linux

Загрузите и установите открытый ключ подписи —

$ rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
    • ДОБАВЬТЕ приведенный ниже текст в файл с суффиксом .repo в каталоге «/etc/yum.repos.d/». Например, эластичный поиск

ДОБАВЬТЕ приведенный ниже текст в файл с суффиксом .repo в каталоге «/etc/yum.repos.d/». Например, эластичный поиск

[elasticsearch-2.x]
name = Elasticsearch repository for2.x packages
baseurl = http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck = 1
gpgkey = http://packages.elastic.co/GPG-KEY-elasticsearch
enabled = 1
    • Теперь вы можете установить Elasticsearch с помощью следующей команды —

Теперь вы можете установить Elasticsearch с помощью следующей команды —

$ yum install elasticsearch

Шаг 4 — Перейдите в домашний каталог Elasticsearch и внутри папки bin. Запустите файлasticsearch.bat в случае окон или вы можете сделать то же самое с помощью командной строки и через терминал в случае файла UNIX ром Elasticsearch.

В винде

> cd elasticsearch-2.1.0/bin
> elasticsearch

В Linux

$ cd elasticsearch-2.1.0/bin
$ ./elasticsearch

Примечание. В случае окон вы можете получить сообщение о том, что JAVA_HOME не установлен, установите его в переменных среды в «C: \ Program Files \ Java \ jre1.8.0_31» или в место, где вы установили Java.

Шаг 5 — Порт по умолчанию для веб-интерфейса Elasticsearch — 9200, или вы можете изменить его, изменив http.port внутри файлаasticsearch.yml, присутствующего в каталоге bin. Вы можете проверить, работает ли сервер, просмотрев http: // localhost: 9200 . Он вернет объект JSON, который содержит информацию об установленном Elasticsearch следующим образом:

{
   "name" : "Brain-Child",
   "cluster_name" : "elasticsearch", "version" : {
      "number" : "2.1.0",
      "build_hash" : "72cd1f1a3eee09505e036106146dc1949dc5dc87",
      "build_timestamp" : "2015-11-18T22:40:03Z",
      "build_snapshot" : false,
      "lucene_version" : "5.3.1"
   },
   "tagline" : "You Know, for Search"
}

Шаг 6 — Вы можете установить fiddler2 с www.telerik.com в качестве внешнего интерфейса для вашего Elasticsearch.

  • В окне настройки fiddler2 вы можете нажать на адрес Elasticsearch, добавив индекс, и, если хотите, тогда введите / отобразите тип, также используя метод HTTP POST, например:

В окне настройки fiddler2 вы можете нажать на адрес Elasticsearch, добавив индекс, и, если хотите, тогда введите / отобразите тип, также используя метод HTTP POST, например:

    • Адресная строка

Адресная строка

http://localhost:9200/schools/school
    • Тело запроса — Вы можете добавить объект JSON, который будет храниться в этом индексе.

Тело запроса — Вы можете добавить объект JSON, который будет храниться в этом индексе.

  • Вы можете использовать то же самое для поиска чего угодно, просто добавив ключевое слово «_search» в конце URL и отправив запрос в теле запроса, например:

Вы можете использовать то же самое для поиска чего угодно, просто добавив ключевое слово «_search» в конце URL и отправив запрос в теле запроса, например:

    • Адресная строка

Адресная строка

POST http://localhost:9200/city/schools/_search
    • Тело запроса

      {«query»: {«match_all»: {}}}

      Этот запрос вернет все из этого индекса, который принадлежит этому конкретному типу.

Тело запроса

{«query»: {«match_all»: {}}}

Этот запрос вернет все из этого индекса, который принадлежит этому конкретному типу.

  • Вы можете удалить определенный индекс или тип, просто поместив его URL-адрес в адресную строку и нажав на него методом HTTP DELETE.

Вы можете удалить определенный индекс или тип, просто поместив его URL-адрес в адресную строку и нажав на него методом HTTP DELETE.

Elasticsearch — Население

В этом разделе мы добавим некоторые индексы, сопоставления и данные в Elasticsearch. Эти данные будут использованы в примерах, описанных в этом руководстве.

Создать индекс

PUT http://localhost:9200/schools

Тело запроса

Он может содержать параметры, специфичные для индекса, но пока он пуст для настроек по умолчанию.

отклик

{"acknowledged": true}

(Это означает, что индекс создан)

Создание карт и добавление данных

Elasticsearch автоматически создаст отображение в соответствии с данными, представленными в теле запроса, мы будем использовать его большую функциональность для добавления более одного объекта JSON в этот индекс.

POST http://localhost:9200/schools/_bulk

Тело запроса

{
   "index":{
      "_index":"schools", "_type":"school", "_id":"1"
   }
}
{
   "name":"Central School", "description":"CBSE Affiliation", "street":"Nagan",
   "city":"paprola", "state":"HP", "zip":"176115", "location":[31.8955385, 76.8380405],
   "fees":2000, "tags":["Senior Secondary", "beautiful campus"], "rating":"3.5"
}
{
   "index":{
      "_index":"schools", "_type":"school", "_id":"2"
   }
}
{
   "name":"Saint Paul School", "description":"ICSE 
   Afiliation", "street":"Dawarka", "city":"Delhi", "state":"Delhi", "zip":"110075",
   "location":[28.5733056, 77.0122136], "fees":5000,
   "tags":["Good Faculty", "Great Sports"], "rating":"4.5"
}
{
   "index":{"_index":"schools", "_type":"school", "_id":"3"}
}
{
   "name":"Crescent School", "description":"State Board Affiliation", "street":"Tonk Road", 
   "city":"Jaipur", "state":"RJ", "zip":"176114","location":[26.8535922, 75.7923988],
   "fees":2500, "tags":["Well equipped labs"], "rating":"4.5"
}

отклик

{
   "took":328, "errors":false,"items":[
      {
         "index":{
            "_index":"schools", "_type":"school", "_id":"1", "_version":1, "_shards":{
               "total":2, "successful":1, "failed":0
            }, "status":201
         }
      },
		
      {
         "index":{
            "_index":"schools", "_type":"school", "_id":"2", "_version":1, "_shards":{
               "total":2, "successful":1, "failed":0
            }, "status":201
         }
      },
		
      {
         "index":{
            "_index":"schools", "_type":"school", "_id":"3", "_version":1, "_shards":{
               "total":2, "successful":1, "failed":0
            }, "status":201
         }
      }
   ]
}

Добавить еще один индекс

Создать индекс

POST http://localhost:9200/schools_gov

Тело запроса

Он может содержать специфичные для индекса настройки, но пока он пуст для настроек по умолчанию.

отклик

{"acknowledged": true} (This means index is created)

Создать сопоставление и добавить данные

POST http://localhost:9200/schools_gov/_bulk

Тело запроса

{
   "index":{
      "_index":"schools_gov", "_type":"school", "_id":"1"
   }
}
{
   "name":"Model School", "description":"CBSE Affiliation", "street":"silk city",
   "city":"Hyderabad", "state":"AP", "zip":"500030", "location":[17.3903703, 78.4752129],
   "fees":200, "tags":["Senior Secondary", "beautiful campus"], "rating":"3"
}
{
   "index":{
      "_index":"schools_gov", "_type":"school", "_id":"2"
   }
}
{
   "name":"Government School", "description":"State Board Affiliation",
   "street":"Hinjewadi", "city":"Pune", "state":"MH", "zip":"411057",
   "location": [18.599752, 73.6821995], "fees":500, "tags":["Great Sports"], "rating":"4"
}

отклик

{
   "took":179, "errors":false, "items":[
      {
        "index":{
           "_index":"schools_gov", "_type":"school", "_id":"1", "_version":1, "_shards":{
              "total":2, "successful":1, "failed":0
            }, "status":201
         }
      },
		
      {
         "index":{
            "_index":"schools_gov", "_type":"school", "_id":"2", "_version":1, "_shards":{
               "total":2, "successful":1, "failed":0
            }, "status":201
         }
      }
   ]
}

Миграция между версиями

В любой системе или программном обеспечении при обновлении до более новой версии нам необходимо выполнить несколько шагов, чтобы сохранить настройки приложения, конфигурации, данные и другие вещи. Эти шаги необходимы для обеспечения стабильности приложения в новой системе или для сохранения целостности данных (предотвращение повреждения данных).

Ниже приведены шаги по обновлению Elasticsearch —

  • Прочитайте документацию по изменениям с https://www.elastic.co/
  • Протестируйте обновленную версию в непроизводственной среде, например в среде UAT, E2E, SIT или DEV.
  • Откат к предыдущей версии Elasticsearch невозможен без резервного копирования данных. Перед обновлением до более поздней версии рекомендуется сделать резервную копию данных.
  • Мы можем выполнить обновление с помощью полного перезапуска кластера или непрерывного обновления. Прокатное обновление для новых версий (для 2.x и новее). Нет никакого перебоя в обслуживании, когда вы используете скользящий метод обновления для миграции.
Старая версия Новая версия Метод обновления
0.90.x 2.x Полный перезапуск кластера
1.x 2.x Полный перезапуск кластера
2.x 2.y Скользящее обновление (y> x)
  • Сделайте резервную копию данных перед миграцией и следуйте инструкциям, чтобы выполнить процесс резервного копирования. Модуль моментальных снимков и восстановления можно использовать для резервного копирования. Этот модуль может использоваться для создания снимка индекса или полного кластера и может храниться в удаленном хранилище.

Модуль моментальных снимков и восстановления

Перед началом процесса резервного копирования хранилище моментальных снимков необходимо зарегистрировать в Elasticsearch.

PUT /_snapshot/backup1
{
   "type": "fs", "settings": {
      ... repository settings ...
   }
}

Примечание. Приведенный выше текст представляет собой HTTP-запрос PUT на http: // localhost: 9200 / _snapshot / backup1 (вместо localhost может быть IP-адрес удаленного сервера). Остальная часть текста является телом запроса. Вы можете сделать это легко, используя fiddler2 и другие веб-инструменты в Windows.

Мы используем общую файловую систему (тип: fs) для резервного копирования; это должно быть зарегистрировано в каждом главном узле и узлах данных. Нам просто нужно добавить переменную path.repo, имеющую путь к хранилищу резервных копий в качестве значения.

После того, как мы добавим путь к хранилищу, нам нужно перезапустить узлы, и тогда можно будет выполнить регистрацию, выполнив следующую команду:

PUT http://localhost:9200/_snapshot/backup1
{
   "type": "fs", "settings": {
      "location": "/mount/backups/backup1", "compress": true
   }
}

Полный перезапуск кластера

Этот процесс обновления включает в себя следующие шаги —

Шаг 1 — Отключить процесс выделения осколков и выключить узел.

PUT http://localhost:9200/_cluster/settings
{
   "persistent": {
      "cluster.routing.allocation.enable": "none"
   }
}

В случае обновления 0.90.x до 1.x используйте следующий запрос —

PUT http://localhost:9200/_cluster/settings
{
   "persistent": {
      "cluster.routing.allocation.disable_allocation": false,
      "cluster.routing.allocation.enable": "none"
   }
}

Шаг 2 — Сделайте синхронизированный сброс в Elasticsearch —

POST http://localhost:9200/_flush/synced

Шаг 3 — На всех узлах убейте все эластичные сервисы.

Шаг 4 — Сделайте следующее на каждом узле —

  • В Debian или Red Hat Node — rmp или dpkg могут использоваться для обновления узла путем установки новых пакетов. Не перезаписывайте конфигурационные файлы.

  • В Windows (zip-файл) или UNIX (tar-файл) — Извлеките новую версию, не перезаписывая каталог конфигурации. Вы можете скопировать файлы из старой установки или изменить path.conf или path.data.

В Debian или Red Hat Node — rmp или dpkg могут использоваться для обновления узла путем установки новых пакетов. Не перезаписывайте конфигурационные файлы.

В Windows (zip-файл) или UNIX (tar-файл) — Извлеките новую версию, не перезаписывая каталог конфигурации. Вы можете скопировать файлы из старой установки или изменить path.conf или path.data.

Шаг 5 — Инициируйте узлы снова, начиная с главного узла (узлы с установленным значением true для узла node.master и установленным значением false для параметра node.data) в кластере. Подождите некоторое время, чтобы установить кластер. Вы можете проверить, отслеживая журналы или используя следующий запрос —

GET _cat/health or http://localhost:9200/_cat/health
GET _cat/nodes or http://localhost:9200/_cat/health

Шаг 6 — Отслеживайте ход формирования кластера с помощью запроса GET _cat / health и ждите желтого в ответе, ответ будет примерно таким:

1451295971 17:46:11 elasticsearch yellow 1 1 5 5 0 0 5 0 - 50.0%

Шаг 7. Включите процесс выделения сегмента, который был отключен на шаге 1, с помощью следующего запроса:

PUT http://localhost:9200/_cluster/settings
{
   "persistent": {
      "cluster.routing.allocation.enable": "all"
   }
}

В случае обновления 0.90.x до 1.x используйте следующий запрос —

PUT http://localhost:9200/_cluster/settings
{
   "persistent": {
      "cluster.routing.allocation.disable_allocation": true,
      "cluster.routing.allocation.enable": "all"
   }
}

Роллинг Обновления

Это похоже на полный перезапуск кластера, кроме шага 3. Здесь вы останавливаете один узел и выполняете обновление. После обновления перезапустите узел и повторите их для всех узлов. После включения процесса выделения сегмента его можно отслеживать с помощью следующего запроса:

GET http://localhost:9200/_cat/recovery

Elasticsearch — Соглашения API

Интерфейс прикладного программирования (API) в сети — это группа вызовов функций или других инструкций по программированию для доступа к программному компоненту в этом конкретном веб-приложении. Например, Facebook API помогает разработчику создавать приложения, получая доступ к данным или другим функциям из Facebook; это может быть дата рождения или обновление статуса.

Elasticsearch предоставляет REST API, доступ к которому осуществляется через JSON через HTTP. Elasticsearch использует следующие соглашения —

Несколько индексов

Большинство операций, в основном поиск и другие операции, в API для одного или нескольких индексов. Это помогает пользователю выполнять поиск в нескольких местах или во всех доступных данных, просто выполнив запрос один раз. Много разных обозначений используются для выполнения операций с несколькими индексами. Мы обсудим некоторые из них здесь, в этом разделе.

Запись через запятую

POST http://localhost:9200/index1,index2,index3/_search

Тело запроса

{
   "query":{
      "query_string":{
         "query":"any_string"
      }
   }
}

отклик

JSON-объекты из index1, index2, index3, содержащие в себе any_string.

ключевое слово _all для всех индексов

POST http://localhost:9200/_all/_search

Тело запроса

{
   "query":{
      "query_string":{
         "query":"any_string"
      }
   }
}

отклик

JSON возражает от всех индексов и имеет any_string в нем.

Подстановочные знаки (*, +, -)

POST http://localhost:9200/school*/_search

Тело запроса

{
   "query":{
      "query_string":{
         "query":"CBSE"
      }
   }
}

отклик

JSON возражает от всех индексов, которые начинаются со школы, в которой есть CBSE.

Также вы можете использовать следующий код:

POST http://localhost:9200/school*,-schools_gov /_search

Тело запроса

{
   "query":{
      "query_string":{
         "query":"CBSE"
      }
   }
}

отклик

JSON возражает от всех индексов, которые начинаются со слова «school», но не от schools_gov, и имеют CBSE.

Есть также некоторые параметры строки запроса URL

  • ignore_unavailable — ошибка не возникнет или операция не будет остановлена, если один или несколько индексов, присутствующих в URL, не существуют. Например, индекс школ существует, но book_shops не существует —

ignore_unavailable — ошибка не возникнет или операция не будет остановлена, если один или несколько индексов, присутствующих в URL, не существуют. Например, индекс школ существует, но book_shops не существует —

POST http://localhost:9200/school*,book_shops/_search

Тело запроса

{
   "query":{
      "query_string":{
         "query":"CBSE"
      }
   }
}

отклик

{
   "error":{
      "root_cause":[{
         "type":"index_not_found_exception", "reason":"no such index",
         "resource.type":"index_or_alias", "resource.id":"book_shops", 
         "index":"book_shops"
      }],
		
      "type":"index_not_found_exception", "reason":"no such index",
      "resource.type":"index_or_alias", "resource.id":"book_shops", 
      "index":"book_shops"
		
   },"status":404
}

Посмотрите на следующий код —

POST http://localhost:9200/school*,book_shops/_search?ignore_unavailable = true

Тело запроса

{
   "query":{
      "query_string":{
         "query":"CBSE"
      }
   }
}

Ответ (без ошибок)

JSON возражает от всех индексов, которые начинаются со школы, в которой есть CBSE.

allow_no_indices

Значение true этого параметра предотвратит ошибку, если URL с подстановочным знаком не приводит к индексам.

Например, нет индекса, который начинается с schools_pri —

POST
http://localhost:9200/schools_pri*/_search?allow_no_indices = true

Тело запроса

{
   "query":{
      "match_all":{}
   }
}

Ответ (без ошибок)

{
   "took":1,"timed_out": false, "_shards":{"total":0, "successful":0, "failed":0}, 
   "hits":{"total":0, "max_score":0.0, "hits":[]}
}

expand_wildcards

Этот параметр определяет, нужно ли расширять символы подстановки, чтобы открывать индексы или закрывать индексы, или и то, и другое. Значение этого параметра может быть открытым и закрытым или не указывать все.

Например, закрыть индекс школы —

POST http://localhost:9200/schools/_close

отклик

{"acknowledged":true}

Посмотрите на следующий код —

POST http://localhost:9200/school*/_search?expand_wildcards = closed

Тело запроса

{
   "query":{
      "match_all":{}
   }
}

отклик

{
   "error":{
      "root_cause":[{
         "type":"index_closed_exception", "reason":"closed", "index":"schools"
      }],
		
      "type":"index_closed_exception", "reason":"closed", "index":"schools"
   }, "status":403
}

Дата Математическая поддержка в именах индексов

Elasticsearch предлагает функциональность для поиска индексов по дате и времени. Нам нужно указать дату и время в определенном формате. Например, accountdetail-2015.12.30, index будет хранить банковские реквизиты по состоянию на 30 декабря 2015 года. Математические операции могут быть выполнены для получения деталей на определенную дату или диапазон дат и времени.

Формат имени даты математического индекса —

<static_name{date_math_expr{date_format|time_zone}}>
http://localhost:9200/<accountdetail-{now-2d{YYYY.MM.dd|utc}}>/_search

static_name — это часть выражения, которая остается неизменной в каждом математическом индексе даты, как и детали счета. date_math_expr содержит математическое выражение, которое динамически определяет дату и время, как now-2d. date_format содержит формат, в котором дата записывается в индексе, например, YYYY.MM.dd. Если сегодняшняя дата — 30 декабря 2015 г., то <accountdetail- {now-2d {YYYY.MM.dd}}> вернет accountdetail-2015.12.28.

выражение Разрешается в
<Accountdetail- {теперь д}> accountdetail-2015.12.29
<Accountdetail- {теперь М}> accountdetail-2015.11.30
<Accountdetail- {Теперь {YYYY.MM}}> accountdetail-2015,12

Теперь мы увидим некоторые общие параметры, доступные в Elasticsearch, которые можно использовать для получения ответа в указанном формате.

Симпатичные результаты

Мы можем получить ответ в хорошо отформатированном объекте JSON, просто добавив параметр запроса URL, то есть pretty = true.

POST http://localhost:9200/schools/_search?pretty = true

Тело запроса

{
   "query":{
      "match_all":{}
   }
}

отклик

……………………..
{
   "_index" : "schools", "_type" : "school", "_id" : "1", "_score" : 1.0,
   "_source":{
      "name":"Central School", "description":"CBSE Affiliation", 
      "street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115",
      "location": [31.8955385, 76.8380405], "fees":2000, 
      "tags":["Senior Secondary", "beautiful campus"], "rating":"3.5"
   }
	
}	
………………….

Человек читаемый вывод

Эта опция может изменить статистические ответы либо в удобочитаемую для человека форму (если человек = истина), либо в читаемую компьютером форму (если человек = ложь). Например, если человек = истина, то расстояние_километр = 20 км, а если человек = ложь, то расстояние_метр = 20000, когда ответ должен использоваться другой компьютерной программой.

Фильтрация ответов

Мы можем отфильтровать ответ на меньшее количество полей, добавив их в параметр field_path. Например,

POST http://localhost:9200/schools/_search?filter_path = hits.total

Тело запроса

{
   "query":{
      "match_all":{}
   }
}

отклик

{"hits":{"total":3}}

Elasticsearch — API документов

Elasticsearch предоставляет API для одного документа и API для нескольких документов, где вызов API нацелен на один документ и несколько документов соответственно.

Индекс API

Это помогает добавлять или обновлять документ JSON в индексе, когда делается запрос к этому соответствующему индексу с определенным отображением. Например, приведенный ниже запрос добавит объект JSON в индекс школ и при отображении школ.

POST http://localhost:9200/schools/school/4

Тело запроса

{
   "name":"City School", "description":"ICSE", "street":"West End", "city":"Meerut", 
   "state":"UP", "zip":"250002", "location":[28.9926174, 77.692485], "fees":3500, 
   "tags":["fully computerized"], "rating":"4.5"
}

отклик

{
   "_index":"schools", "_type":"school", "_id":"4", "_version":1,
   "_shards":{"total":2, "successful":1,"failed":0}, "created":true
}

Автоматическое создание индекса

Когда делается запрос на добавление объекта JSON к определенному индексу, и если этот индекс не существует, этот API автоматически создает этот индекс, а также базовое отображение для этого конкретного объекта JSON. Эту функциональность можно отключить, изменив значения следующих параметров на false, которые присутствуют в файлеasticsearch.yml.

action.auto_create_index:false
index.mapper.dynamic:false

Вы также можете ограничить автоматическое создание индекса, когда разрешено только имя индекса с конкретными шаблонами, изменив значение следующего параметра —

action.auto_create_index:+acc*,-bank*

(где + означает, что разрешено, а — означает, что не разрешено )

Versioning

Elasticsearch также предоставляет средства контроля версий. Мы можем использовать параметр запроса версии, чтобы указать версию конкретного документа. Например,

POST http://localhost:9200/schools/school/1?version = 1

Тело запроса

{
   "name":"Central School", "description":"CBSE Affiliation", "street":"Nagan",
   "city":"paprola", "state":"HP", "zip":"176115", "location":[31.8955385, 76.8380405],
   "fees":2200, "tags":["Senior Secondary", "beautiful campus"], "rating":"3.3"
}

отклик

{
   "_index":"schools", "_type":"school", "_id":"1", "_version":2,
   "_shards":{"total":2, "successful":1,"failed":0}, "created":false
}

Есть два наиболее важных типа управления версиями; внутренняя версия — это версия по умолчанию, которая начинается с 1 и увеличивается с каждым обновлением, включая удаление. Номер версии может быть установлен снаружи. Чтобы включить эту функцию, нам нужно установить для version_type значение external.

Управление версиями происходит в режиме реального времени, и на него не влияют операции поиска в реальном времени.

Тип операции

Тип операции используется для форсирования операции создания, это помогает избежать перезаписи существующего документа.

POST http://localhost:9200/tutorials/chapter/1?op_type = create

Тело запроса

{
   "Text":"this is chapter one"
}

отклик

{
   "_index":"tutorials", "_type":"chapter", "_id":"1", "_version":1,
   "_shards":{"total":2, "successful":1, "failed":0}, "created":true
}

Автоматическая генерация ID

Если идентификатор не указан в операции индексации, то Elasticsearch автоматически генерирует идентификатор для этого документа.

Родители и дети

Вы можете определить родителя любого документа, передав идентификатор родительского документа в параметре запроса родительского URL.

POST http://localhost:9200/tutorials/article/1?parent = 1

Тело запроса

{
   "Text":"This is article 1 of chapter 1"
}

Примечание. Если при выполнении этого примера вы получили исключение, заново создайте индекс, добавив в него следующий текст.

{
   "mappings": {
      "chapter": {},
      "article": {
         "_parent": {
            "type": "chapter"
         }
      }
   }
}

Тайм-аут

По умолчанию операция индексации будет ждать, пока основной сегмент не станет доступным в течение 1 минуты, прежде чем произойдет сбой и ответит с ошибкой. Это значение времени ожидания можно изменить явно, передав значение в параметр времени ожидания.

POST http://localhost:9200/tutorials/chapter/2?timeout = 3m

Тело запроса

{
   "Text":"This is chapter 2 waiting for primary shard for 3 minutes"
}

Получить API

API помогает извлечь объект типа JSON, выполнив запрос get для определенного документа. Например,

GET http://localhost:9200/schools/school/1

отклик

{
   "_index":"schools", "_type":"school", "_id":"1", "_version":2,
   "found":true, "_source":{
      "name":"Central School", "description":"CBSE Affiliation", 
      "street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115",
      "location":[31.8955385,76.8380405], "fees":2200, 
      "tags":["Senior Secondary", "beautiful campus"], "rating":"3.3"
   }
}
  • Эта операция выполняется в режиме реального времени и не зависит от частоты обновления индекса.

  • Вы также можете указать версию, тогда Elasticsearch будет извлекать только эту версию документа.

  • Вы также можете указать _all в запросе, чтобы Elasticsearch мог искать этот идентификатор документа в каждом типе, и он будет возвращать первый соответствующий документ.

  • Вы также можете указать поля, которые вы хотите в своем результате из этого конкретного документа.

Эта операция выполняется в режиме реального времени и не зависит от частоты обновления индекса.

Вы также можете указать версию, тогда Elasticsearch будет извлекать только эту версию документа.

Вы также можете указать _all в запросе, чтобы Elasticsearch мог искать этот идентификатор документа в каждом типе, и он будет возвращать первый соответствующий документ.

Вы также можете указать поля, которые вы хотите в своем результате из этого конкретного документа.

GET http://localhost:9200/schools/school/1?fields = name,fees

отклик

……………………..
"fields":{
   "name":["Central School"], "fees":[2200]
}
……………………..
  • Вы также можете получить исходную часть в своем результате, просто добавив _source часть в свой запрос get.
GET http://localhost:9200/schools/school/1/_source

отклик

{
   "name":"Central School", "description":"CBSE Afiliation", "street":"Nagan",
   "city":"paprola", "state":"HP", "zip":"176115", "location":[31.8955385, 76.8380405],
   "fees":2200, "tags":["Senior Secondary", "beatiful campus"], "rating":"3.3"
}

Вы также можете обновить осколок перед выполнением операции get, установив для параметра refresh значение true.

Удалить API

Вы можете удалить определенный индекс, сопоставление или документ, отправив запрос HTTP DELETE в Elasticsearch. Например,

DELETE http://localhost:9200/schools/school/4

отклик

{
   "found":true, "_index":"schools", "_type":"school", "_id":"4", "_version":2,
   "_shards":{"total":2, "successful":1, "failed":0}
}
  • Версия документа может быть указана для удаления этой конкретной версии.

  • Параметр маршрутизации может быть указан для удаления документа от конкретного пользователя, и операция завершается ошибкой, если документ не принадлежит этому конкретному пользователю.

  • В этой операции вы можете указать параметры обновления и тайм-аута, аналогичные GET API.

Версия документа может быть указана для удаления этой конкретной версии.

Параметр маршрутизации может быть указан для удаления документа от конкретного пользователя, и операция завершается ошибкой, если документ не принадлежит этому конкретному пользователю.

В этой операции вы можете указать параметры обновления и тайм-аута, аналогичные GET API.

Обновить API

Сценарий используется для выполнения этой операции, а управление версиями используется для того, чтобы убедиться, что во время получения и повторного индексирования не было обновлений. Например, обновите плату за обучение, используя скрипт —

POST http://localhost:9200/schools_gov/school/1/_update

Тело запроса

{
   "script":{
      "inline": "ctx._source.fees+ = inc", "params":{
         "inc": 500
      }
   }
}

отклик

{
   "_index":"schools_gov", "_type":"school", "_id":"1", "_version":2,
   "_shards":{"total":2, "successful":1, "failed":0}
}

Примечание. Если вы получаете исключение сценария, рекомендуется добавить следующие строки в elastcisearch.yml

script.inline: on
script.indexed: on

Вы можете проверить обновление, отправив запрос на получение обновленного документа.

GET http://localhost:9200/schools_gov/school/1

Multi Get API

Он обладает той же функциональностью, что и GET API, но этот запрос get может возвращать более одного документа. Мы используем массив doc для указания индекса, типа и идентификатора всех документов, которые необходимо извлечь.

POST http://localhost:9200/_mget

Тело запроса

{
   "docs":[
      {
         "_index": "schools", "_type": "school", "_id": "1"
      },
		
      {
         "_index":"schools_gev", "_type":"school", "_id": "2"
      }
   ]
}

отклик

{
   "docs":[
      {
         "_index":"schools", "_type":"school", "_id":"1",
         "_version":1, "found":true, "_source":{
            "name":"Central School", "description":"CBSE Afiliation",
            "street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115",
            "location":[31.8955385,76.8380405], "fees":2000, 
            "tags":["Senior Secondary", "beatiful campus"], "rating":"3.5"
         }
      },
		
      {
         "_index":"schools_gev", "_type":"school", "_id":"2", "error":{
			
            "root_cause":[{
               "type":"index_not_found_exception", "reason":"no such index", 
               "index":"schools_gev"
            }],
				
            "type":"index_not_found_exception", "reason":"no such index", 
            "index":"schools_gev"
         }
      }
   ]
}

Массовое API

Этот API-интерфейс используется для массовой загрузки или удаления объектов JSON путем выполнения нескольких операций индексации / удаления в одном запросе. Нам нужно добавить ключевое слово «_bulk» для вызова этого API. Пример этого API уже выполнен в заполненной статье Elasticsearch. Все остальные функции аналогичны GET API.

Elasticsearch — API поиска

Этот API используется для поиска контента в Elasticsearch. Пользователь может выполнить поиск, отправив запрос на получение со строкой запроса в качестве параметра, или запрос в теле сообщения после запроса. В основном все поисковые APIS являются мультииндексными, мультитипными.

Multi-Index

Elasticsearch позволяет нам искать документы, присутствующие во всех индексах или в некоторых конкретных индексах. Например, если нам нужно найти все документы с именем, которое содержит центральный.

GET http://localhost:9200/_search?q = name:central

отклик

{
   "took":78, "timed_out":false, "_shards":{"total":10, "successful":10, "failed":0},
   "hits":{
      "total":1, "max_score":0.19178301, "hits":[{
         "_index":"schools", "_type":"school", "_id":"1", "_score":0.19178301,
         "_source":{
            "name":"Central School", "description":"CBSE Affiliation", 
            "street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115",
            "location":[31.8955385, 76.8380405], "fees":2000, 
            "tags":["Senior Secondary", "beautiful campus"], "rating":"3.5"
         }
      }]
   }
}

Или, мы можем искать то же самое в школах, индексы schools_gov —

GET http://localhost:9200/schools,schools_gov/_search?q = name:model

Multi-Type

Мы также можем искать все документы в индексе по всем типам или в некотором указанном типе. Например,

Get http://localhost:9200/schools/_search?q = tags:sports

отклик

{
   "took":16, "timed_out":false, "_shards":{"total":5, "successful":5, "failed":0},
   "hits":{
      "total":1, "max_score":0.5, "hits":[{
         "_index":"schools", "_type":"school", "_id":"2", "_score":0.5,
         "_source":{
            "name":"Saint Paul School", "description":"ICSE Afiliation", 
            "street":"Dawarka", "city":"Delhi", "state":"Delhi", "zip":"110075", 
            "location":[28.5733056, 77.0122136], "fees":5000, 
            "tags":["Good Faculty", "Great Sports"], "rating":"4.5"
         }
      }]
   }
}

URI Поиск

Многие параметры могут быть переданы в операции поиска с использованием универсального идентификатора ресурса —

Sr.No Параметр и описание
1

Q

Этот параметр используется для указания строки запроса.

2

снисходительный

Ошибки на основе формата можно игнорировать, просто установив для этого параметра значение true. Это ложь по умолчанию.

3

поля

Этот параметр помогает нам получить ответ из выборочных полей.

4

Сортировать

С помощью этого параметра мы можем получить отсортированный результат, возможные значения этого параметра: fieldName, fieldName: asc / fieldname: desc

5

Таймаут

Мы можем ограничить время поиска с помощью этого параметра, и ответ содержит только попадания в указанное время. По умолчанию таймаут отсутствует.

6

terminate_after

Мы можем ограничить ответ указанным количеством документов для каждого сегмента, при достижении которого запрос будет завершен досрочно. По умолчанию нет terminate_after.

7

от

Начиная с индекса хитов для возврата. По умолчанию 0.

8

размер

Обозначает количество попаданий для возврата. По умолчанию 10.

Q

Этот параметр используется для указания строки запроса.

снисходительный

Ошибки на основе формата можно игнорировать, просто установив для этого параметра значение true. Это ложь по умолчанию.

поля

Этот параметр помогает нам получить ответ из выборочных полей.

Сортировать

С помощью этого параметра мы можем получить отсортированный результат, возможные значения этого параметра: fieldName, fieldName: asc / fieldname: desc

Таймаут

Мы можем ограничить время поиска с помощью этого параметра, и ответ содержит только попадания в указанное время. По умолчанию таймаут отсутствует.

terminate_after

Мы можем ограничить ответ указанным количеством документов для каждого сегмента, при достижении которого запрос будет завершен досрочно. По умолчанию нет terminate_after.

от

Начиная с индекса хитов для возврата. По умолчанию 0.

размер

Обозначает количество попаданий для возврата. По умолчанию 10.

Запрос Тела Поиск

Мы также можем указать запрос, используя DSL запроса в теле запроса, и есть много примеров, уже приведенных в предыдущих главах, таких как —

POST http://localhost:9200/schools/_search

Тело запроса

{
   "query":{
      "query_string":{
         "query":"up"
      }
   }
}

отклик

……………………………………………….
{
   "_source":{
      "name":"City School", "description":"ICSE", "street":"West End",
      "city":"Meerut", "state":"UP", "zip":"250002", "location":[28.9926174, 77.692485],
      "fees":3500, "tags":["Well equipped labs"],"rating":"4.5"
   }
}
……………………………………………….

Elasticsearch — Агрегации

Эта структура собирает все данные, выбранные поисковым запросом. Эта структура состоит из множества строительных блоков, которые помогают составлять сложные сводки данных. Основная структура агрегации представлена ​​ниже —

"aggregations" : {
   "<aggregation_name>" : {
      "<aggregation_type>" : {
         <aggregation_body>
      }
		
      [,"meta" : { [<meta_data_body>] } ]?
      [,"aggregations" : { [<sub_aggregation>]+ } ]?
   }
}

Существуют различные типы агрегатов, каждый со своим назначением —

Метрические агрегаты

Эти агрегации помогают вычислять матрицы из значений полей агрегированных документов, и иногда некоторые значения могут быть сгенерированы из сценариев.

Числовые матрицы могут быть однозначными, как средняя агрегация, или многозначными, как статистика .

Средняя агрегация

Эта агрегация используется для получения среднего значения любого числового поля, присутствующего в агрегированных документах. Например,

POST http://localhost:9200/schools/_search

Тело запроса

{
   "aggs":{
      "avg_fees":{"avg":{"field":"fees"}}
   }
}

отклик

{
   "took":44, "timed_out":false, "_shards":{"total":5, "successful":5, "failed":0},
   "hits":{
      "total":3, "max_score":1.0, "hits":[
         {
            "_index":"schools", "_type":"school", "_id":"2", "_score":1.0,
            "_source":{
               "name":"Saint Paul School", "description":"ICSE Affiliation",
               "street":"Dawarka", "city":"Delhi", "state":"Delhi", 
               "zip":"110075", "location":[28.5733056, 77.0122136], "fees":5000, 
               "tags":["Good Faculty", "Great Sports"], "rating":"4.5"
            }
         },
			
         {
            "_index":"schools", "_type":"school", "_id":"1", "_score":1.0,
            "_source":{
               "name":"Central School", "description":"CBSE Affiliation",
               "street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115",
               "location":[31.8955385, 76.8380405], "fees":2200, 
               "tags":["Senior Secondary", "beautiful campus"], "rating":"3.3"
            }
         },
			
         {
            "_index":"schools", "_type":"school", "_id":"3", "_score":1.0,
            "_source":{
               "name":"Crescent School", "description":"State Board Affiliation",
               "street":"Tonk Road", "city":"Jaipur", "state":"RJ", 
               "zip":"176114", "location":[26.8535922, 75.7923988], "fees":2500, 
               "tags":["Well equipped labs"], "rating":"4.5"
            }
         }
      ]
   }, "aggregations":{"avg_fees":{"value":3233.3333333333335}}
}

Если значение отсутствует в одном или нескольких агрегированных документах, оно по умолчанию игнорируется. Вы можете добавить пропущенное поле в агрегат для обработки пропущенного значения по умолчанию.

{
   "aggs":{
      "avg_fees":{
         "avg":{
            "field":"fees"
            "missing":0
         }
      }
   }
}

Агрегирование кардинальности

Эта агрегация дает количество отдельных значений определенного поля. Например,

POST http://localhost:9200/schools*/_search

Тело запроса

{
   "aggs":{
      "distinct_name_count":{"cardinality":{"field":"name"}}
   }
}

отклик

………………………………………………
{
   "name":"Government School", "description":"State Board Afiliation",
   "street":"Hinjewadi", "city":"Pune", "state":"MH", "zip":"411057",
   "location":[18.599752, 73.6821995], "fees":500, "tags":["Great Sports"], 
   "rating":"4"
},

{
   "_index":"schools_gov", "_type": "school", "_id":"1", "_score":1.0,
   "_source":{
      "name":"Model School", "description":"CBSE Affiliation", "street":"silk city",
      "city":"Hyderabad", "state":"AP", "zip":"500030", 
      "location":[17.3903703, 78.4752129], "fees":700, 
      "tags":["Senior Secondary", "beautiful campus"], "rating":"3"
   }
}, "aggregations":{"disticnt_name_count":{"value":3}}
………………………………………………

Примечание . Значение кардинальности равно 3, поскольку в названии есть три различных значения: правительство, школа и модель.

Расширенная агрегация статистики

Эта агрегация генерирует всю статистику о конкретном числовом поле в агрегированных документах. Например,

POST http://localhost:9200/schools/school/_search

Тело запроса

{
   "aggs" : {
      "fees_stats" : { "extended_stats" : { "field" : "fees" } }
   }
}

отклик

………………………………………………
{
   "aggregations":{
      "fees_stats":{
         "count":3, "min":2200.0, "max":5000.0, 
         "avg":3233.3333333333335, "sum":9700.0,
         "sum_of_squares":3.609E7, "variance":1575555.555555556, 
         "std_deviation":1255.2113589175156,
				
         "std_deviation_bounds":{
            "upper":5743.756051168364, "lower":722.9106154983024
         }
      }
   }
}
………………………………………………

Макс Агрегация

Эта агрегация находит максимальное значение определенного числового поля в агрегированных документах. Например,

POST http://localhost:9200/schools*/_search

Тело запроса

{
   "aggs" : {
      "max_fees" : { "max" : { "field" : "fees" } }
   }
}

отклик

………………………………………………
{
   aggregations":{"max_fees":{"value":5000.0}}
}
………………………………………………

Мин Агрегация

Эта агрегация находит максимальное значение определенного числового поля в агрегированных документах. Например,

POST http://localhost:9200/schools*/_search

Тело запроса

{
   "aggs" : {
      "min_fees" : { "min" : { "field" : "fees" } }
   }
}

отклик

………………………………………………
"aggregations":{"min_fees":{"value":500.0}}
………………………………………………

Суммарная агрегация

Эта агрегация вычисляет сумму определенного числового поля в агрегированных документах. Например,

POST http://localhost:9200/schools*/_search

Тело запроса

{
   "aggs" : {
      "total_fees" : { "sum" : { "field" : "fees" } }
   }
}

отклик

………………………………………………
"aggregations":{"total_fees":{"value":10900.0}}
………………………………………………

Существуют некоторые другие агрегации метрик, которые используются в особых случаях, таких как агрегация географических границ и агрегация геоцентроидов с целью определения географического местоположения.

Агрегаты ковшей

Эти агрегаты содержат множество сегментов для различных типов агрегатов, имеющих критерий, который определяет, принадлежит ли документ этому сегменту или нет. Агрегаты ведра были описаны ниже —

Детская агрегация

Это объединение сегментов создает коллекцию документов, которые сопоставляются с родительским сегментом. Параметр типа используется для определения родительского индекса. Например, у нас есть бренд и его разные модели, а затем тип модели будет иметь следующее поле _parent —

{
   "model" : {
      "_parent" : {
         "type" : "brand"
      }
   }
}

Существует много других специальных агрегатов, которые полезны во многих других случаях, а именно:

  • Агрегирование гистограммы даты
  • Агрегация диапазона дат
  • Агрегация фильтров
  • Агрегация фильтров
  • Географическая агрегация расстояний
  • Сетка агрегации GeoHash
  • Глобальная агрегация
  • Агрегация гистограммы
  • Агрегация диапазона IPv4
  • Отсутствует агрегация
  • Вложенная агрегация
  • Агрегация диапазона
  • Обратное вложенное агрегирование
  • Агрегация пробоотборников
  • Основные термины Агрегация
  • Условия агрегации

Метаданные агрегации

Вы можете добавить некоторые данные об агрегации во время запроса, используя метатег, и можете получить их в ответ. Например,

POST http://localhost:9200/school*/report/_search

Тело запроса

{
   "aggs" : {
      "min_fees" : { "avg" : { "field" : "fees" } ,
         "meta" :{
            "dsc" :"Lowest Fees"
         }
      }
   }
}

отклик

………………………………………………
{
   "aggregations":{"min_fees":{"meta":{"dsc":"Lowest Fees"}, "value":2180.0}}
}
………………………………………………

Elasticsearch — Индекс API

Эти API отвечают за управление всеми аспектами индекса, такими как настройки, псевдонимы, сопоставления, шаблоны индексов.

Создать индекс

Этот API поможет вам создать индекс. Индекс может быть создан автоматически, когда пользователь передает объекты JSON в любой индекс, или он может быть создан до этого. Чтобы создать индекс, вам просто нужно отправить запрос на публикацию с настройками, отображениями и псевдонимами или просто запрос без тела. Например,

POST http://localhost:9200/colleges

отклик

{"acknowledged":true}

Или с некоторыми настройками —

POST http://localhost:9200/colleges

Тело запроса

{
   "settings" : {
      "index" : {
         "number_of_shards" : 5, "number_of_replicas" : 3
      }
   }
}

отклик

{"acknowledged":true}

Или с отображением —

POST http://localhost:9200/colleges

Тело запроса

{
   "settings" : {
      "number_of_shards" : 3
   },
   "mappings" : {
      "type1" : {
         "_source" : { "enabled" : false }, "properties" : {
            "college_name" : { "type" : "string" }, "college type" : {"type":"string"}
         }
      }
   }
}

отклик

{"acknowledged":true}

Или с псевдонимом —

POST http://localhost:9200/colleges

Тело запроса

{
   "aliases" : {
      "alias_1" : {}, "alias_2" : {
         "filter" : {
            "term" : {"user" : "manu" }
         },
         "routing" : "manu"
      }
   }
}

отклик

{"acknowledged":true}

Удалить индекс

Этот API поможет вам удалить любой индекс. Вам просто нужно передать запрос на удаление с URL этого конкретного индекса. Например,

DELETE http://localhost:9200/colleges

Вы можете удалить все индексы, используя _all, *.

Получить индекс

Этот API можно вызвать, просто отправив запрос get на один или несколько индексов. Это возвращает информацию об индексе.

GET http://localhost:9200/schools

отклик

{
   "schools":{
      "aliases":{}, "mappings":{
         "school":{
            "properties":{
               "city":{"type":"string"}, "description":{"type":"string"},
                  "fees":{"type":"long"}, "location":{"type":"double"},
                  "name":{"type":"string"}, "rating":{"type":"string"},
                  "state":{"type":"string"}, "street":{"type":"string"},
                  "tags":{"type":"string"}, "zip":{"type":"string"}
            }
         }
      },
      "settings":{
         "index":{
            "creation_date":"1454409831535", "number_of_shards":"5",
               "number_of_replicas":"1", "uuid":"iKdjTtXQSMCW4xZMhpsOVA",
               "version":{"created":"2010199"}
         }
      },
      "warmers":{}
   }
}

Вы можете получить информацию обо всех индексах, используя _all или *.

Индекс существует

Существование индекса можно определить, просто отправив запрос на получение этого индекса. Если HTTP-ответ равен 200, он существует; если это 404, он не существует.

API открытия / закрытия индекса

Очень легко закрыть или открыть один или несколько индексов, просто добавив _close или _open в посте, чтобы запросить этот индекс. Например,

POST http://localhost:9200/schools/_close

Или же

POST http://localhost:9200/schools/_open

Псевдонимы индекса

Этот API помогает назначать псевдоним любому индексу с помощью ключевого слова _aliases. Один псевдоним может быть сопоставлен более чем одному, и псевдоним не может иметь то же имя, что и индекс. Например,

POST http://localhost:9200/_aliases

Тело запроса

{
   "actions" : [
      { "add" : { "index" : "schools", "alias" : "schools_pri" } }
   ]
}

отклик

{"acknowledged":true}

Затем,

GET http://localhost:9200/schools_pri

отклик

………………………………………………
{"schools":{"aliases":{"schools_pri":{}},"}}
………………………………………………

Настройки индекса

Вы можете получить настройки индекса, просто добавив ключевое слово _settings в конце URL. Например,

GET http://localhost:9200/schools/_settings

отклик

{
   "schools":{
      "settings":{
         "index":{
            "creation_date":"1454409831535", "number_of_shards":"5", 
               "number_of_replicas":"1", "uuid":"iKdjTtXQSMCW4xZMhpsOVA", 
               "version":{"created":"2010199"}
        }
      }
   }
}

анализировать

Этот API помогает анализировать текст и отправлять токены со значением смещения и типом данных. Например,

POST http://localhost:9200/_analyze

Тело запроса

{
   "analyzer" : "standard",
   "text" : "you are reading this at tutorials point"
}

отклик

{
   "tokens":[
      {"token":"you", "start_offset":0, "end_offset":3, "type":"<ALPHANUM>", "position":0},
         {"token":"are", "start_offset":4, "end_offset":7, "type":"<ALPHANUM>", "position":1},
         {"token":"reading", "start_offset":8, "end_offset":15, "type":"<ALPHANUM>", "position":2},
         {"token":"this", "start_offset":16, "end_offset":20, "type":"<ALPHANUM>", "position":3},
         {"token":"at", "start_offset":21, "end_offset":23, "type":"<ALPHANUM>", "position":4},
         {"token":"tutorials", "start_offset":24, "end_offset":33, "type":"<ALPHANUM>", "position":5},
         {"token":"point", "start_offset":34, "end_offset":39, "type":"<ALPHANUM>", "position":6}
   ]
}

Вы также можете анализировать текст с любым индексом, а затем текст будет проанализирован в соответствии с анализатором, связанным с этим индексом.

Индексные шаблоны

Вы также можете создавать шаблоны индексов с сопоставлениями, которые можно применять к новым индексам. Например,

POST http://localhost:9200/_template/template_a

Тело запроса

{
   "template" : "tu*", 
      "settings" : {
         "number_of_shards" : 3
   },
   "mappings" : {
      "chapter" : {
         "_source" : { "enabled" : false }
      }
   }
}

Любой индекс, начинающийся с «tu», будет иметь те же настройки, что и template_a.

Индекс Статистика

Этот API помогает вам извлечь статистику о конкретном индексе. Вам просто нужно отправить запрос на получение с индексом URL и ключевым словом _stats в конце.

GET http://localhost:9200/schools/_stats

отклик

………………………………………………
{"_shards":{"total":10, "successful":5, "failed":0}, "_all":{"primaries":{"docs":{
   "count":3, "deleted":0}}}, "store":{"size_in_bytes":16653, "throttle_time_in_millis":0},
………………………………………………

Промывать

Этот API-интерфейс помогает очищать данные из памяти индекса и переносить их в хранилище индекса, а также очищает внутренний журнал транзакций. Например,

GET http://localhost:9200/schools/_flush

отклик

{"_shards":{"total":10, "successful":5, "failed":0}}

обновление

Обновление запланировано по умолчанию в Elasticsearch, но вы можете явно обновить один или несколько индексов с помощью _refresh. Например,

GET http://localhost:9200/schools/_refresh

отклик

{"_shards":{"total":10, "successful":5, "failed":0}}

Elasticsearch — API кластеров

Этот API используется для получения информации о кластере и его узлах и внесения в них изменений. Для вызова этого API нам нужно указать имя узла, адрес или _local. Например,

GET http://localhost:9200/_nodes/_local

отклик

………………………………………………
{
   "cluster_name":"elasticsearch", "nodes":{
      "Vy3KxqcHQdm4cIM22U1ewA":{
         "name":"Red Guardian", "transport_address":"127.0.0.1:9300", 
         "host":"127.0.0.1", "ip":"127.0.0.1", "version":"2.1.1", 
         "build":"40e2c53", "http_address":"127.0.0.1:9200",
      }
   }
}
………………………………………………

Или же

Get http://localhost:9200/_nodes/127.0.0.1

отклик

То же, что в примере выше.

Здоровье кластера

Этот API используется для получения статуса работоспособности кластера путем добавления ключевого слова работоспособности. Например,

GET http://localhost:9200/_cluster/health

отклик

{
   "cluster_name":"elasticsearch", "status":"yellow", "timed_out":false,
   "number_of_nodes":1, "number_of_data_nodes":1, "active_primary_shards":23,
   "active_shards":23, "relocating_shards":0, "initializing_shards":0,
   "unassigned_shards":23, "delayed_unassigned_shards":0, "number_of_pending_tasks":0,
   "number_of_in_flight_fetch":0, "task_max_waiting_in_queue_millis":0,
   "active_shards_percent_as_number":50.0
}

Состояние кластера

Этот API используется для получения информации о состоянии кластера путем добавления URL-адреса ключевого слова state. Информация о состоянии содержит версию, главный узел, другие узлы, таблицу маршрутизации, метаданные и блоки. Например,

GET http://localhost:9200/_cluster/state 10. Elasticsearch — Cluster APIs

отклик

………………………………………………

{
   "cluster_name":"elasticsearch", "version":27, "state_uuid":"B3P7uHGKQUGsSsiX2rGYUQ",
   "master_node":"Vy3KxqcHQdm4cIM22U1ewA",
	
}
………………………………………………

Статистика кластера

Этот API-интерфейс помогает получать статистику о кластере с помощью ключевого слова stats. Этот API-интерфейс возвращает номер сегмента, размер хранилища, использование памяти, количество узлов, роли, ОС и файловую систему. Например,

GET http://localhost:9200/_cluster/stats

отклик

………………………………………………

{
   "timestamp":1454496710020, "cluster_name":"elasticsearch", "status":"yellow",
   "indices":{
      "count":5, "shards":{
         "total":23, "primaries":23, "replication":0.0,"
      }
   }

}
………………………………………………

Ожидающие кластерные задачи

Этот API используется для мониторинга отложенных задач в любом кластере. Задачи, такие как создание индекса, обновление отображения, выделение сегмента, сбой сегмента и т. Д. Например,

GET http://localhost:9200/_cluster/pending_tasks

Кластер Reroute

Этот API используется для перемещения шарда от одного узла к другому или для отмены любого выделения или выделения любого неназначенного шарда. Например,

POST http://localhost:9200/_cluster/reroute

Тело запроса

{
   "commands" : [ 
      {
         "move" :
         {
            "index" : "schools", "shard" : 2,
            "from_node" : "nodea", "to_node" : "nodeb"
         }
      },
		
      {
         "allocate" : {
            "index" : "test", "shard" : 1, "node" : "nodec"
         }
      }
   ]
}

Настройки обновления кластера

Этот API позволяет обновлять настройки кластера с помощью ключевого слова settings. Существует два типа настроек — постоянные (применяются при перезапусках) и временные (не сохраняются при полном перезапуске кластера).

Статистика узла

Этот API используется для получения статистики еще одного узла кластера. Статистика узла почти такая же, как у кластера. Например,

GET http://localhost:9200/_nodes/stats

отклик

………………………………………………

{
   "cluster_name":"elasticsearch", "nodes":{
      "Vy3KxqcHQdm4cIM22U1ewA":{
         "timestamp":1454497097572, "name":"Red Guardian", 
         "transport_address":"127.0.0.1:9300", "host":"127.0.0.1", "ip":["127.0.0.1:9300",
      }
   }

}
………………………………………………

Узлы

Этот API-интерфейс помогает вам получать информацию о текущих горячих потоках на каждом узле в кластере. Например,

GET http://localhost:9200/_nodes/hot_threads

отклик

………………………………………………
::: {Red Guardian} {Vy3KxqcHQdm4cIM22U1ewA} {127.0.0.1}{127.0.0.1:9300}Hot threads at 
   2016-02-03T10:59:48.856Z, interval = 500ms, busiestThreads = 3, 
   ignoreIdleThreads = true:0.0% (0s out of 500ms) cpu usage by thread 'Attach Listener'
      unique snapshot
      unique snapshot
………………………………………………

Elasticsearch — Query DSL

В Elasticsearch поиск выполняется с использованием запросов на основе JSON. Запрос состоит из двух пунктов:

  • Предложения Leaf Query — Эти предложения представляют собой соответствие, термин или диапазон, которые ищут определенное значение в определенном поле.

  • Составные предложения запросов — эти запросы представляют собой комбинацию конечных предложений запросов и других составных запросов для извлечения требуемой информации.

Предложения Leaf Query — Эти предложения представляют собой соответствие, термин или диапазон, которые ищут определенное значение в определенном поле.

Составные предложения запросов — эти запросы представляют собой комбинацию конечных предложений запросов и других составных запросов для извлечения требуемой информации.

Elasticsearch поддерживает большое количество запросов. Запрос начинается с ключевого слова запроса, а затем содержит условия и фильтры внутри в виде объекта JSON. Различные типы запросов были описаны ниже —

Совпадение всех запросов

Это самый простой запрос; он возвращает все содержимое и со счетом 1,0 для каждого объекта. Например,

POST http://localhost:9200/schools*/_search

Тело запроса

{
   "query":{
      "match_all":{}
   }
}

отклик

{
   "took":1, "timed_out":false, "_shards":{"total":10, "successful":10, "failed":0},
   "hits":{
      "total":5, "max_score":1.0, "hits":[
         {
            "_index":"schools", "_type":"school", "_id":"2", "_score":1.0,
            "_source":{
               "name":"Saint Paul School", "description":"ICSE Affiliation",
               "street":"Dawarka", "city":"Delhi", "state":"Delhi", 
               "zip":"110075", "location":[28.5733056, 77.0122136], "fees":5000, 
               "tags":["Good Faculty", "Great Sports"], "rating":"4.5"
            }
         },
				
         {
            "_index":"schools_gov", "_type":"school", "_id":"2", "_score":1.0,
            "_source":{
               "name":"Government School", "description":"State Board Affiliation",
               "street":"Hinjewadi", "city":"Pune", "state":"MH", "zip":"411057",
               "location":[18.599752, 73.6821995], "fees":500, "tags":["Great Sports"],
               "rating":"4"
            }
         },
				
         {
            "_index":"schools", "_type":"school", "_id":"1", "_score":1.0,
            "_source":{
               "name":"Central School", "description":"CBSE Affiliation",
               "street":"Nagan", "city":"paprola", "state":"HP", 
               "zip":"176115", "location":[31.8955385, 76.8380405], 
               "fees":2200, "tags":["Senior Secondary", "beautiful campus"], 
               "rating":"3.3"
            }
         },
				
         {
            "_index":"schools_gov", "_type":"school", "_id":"1", "_score":1.0,
            "_source":{
               "name":"Model School", "description":"CBSE Affiliation",
               "street":"silk city", "city":"Hyderabad", "state":"AP", 
               "zip":"500030", "location":[17.3903703, 78.4752129], "fees":700, 
               "tags":["Senior Secondary", "beautiful campus"], "rating":"3"
            }
         },
				
         {
            "_index":"schools", "_type":"school", "_id":"3", "_score":1.0,
            "_source":{
               "name":"Crescent School", "description":"State Board Affiliation",
               "street":"Tonk Road", "city":"Jaipur", "state":"RJ", "zip":"176114",
               "location":[26.8535922, 75.7923988], "fees":2500, 
               "tags":["Well equipped labs"], "rating":"4.5"
            }
         }
      ]
   }
}

Полнотекстовые запросы

Эти запросы используются для поиска по всему тексту, например по главе или новостной статье. Этот запрос работает в соответствии с анализатором, связанным с этим конкретным индексом или документом. В этом разделе мы обсудим различные типы полнотекстовых запросов.

Запрос на совпадение

Этот запрос сопоставляет текст или фразу со значениями одного или нескольких полей. Например,

POST http://localhost:9200/schools*/_search

Тело запроса

{
   "query":{
      "match" : {
         "city":"pune"
      }
   }
}

отклик

{
   "took":1, "timed_out":false, "_shards":{"total":10, "successful":10, "failed":0},
   "hits":{
      "total":1, "max_score":0.30685282, "hits":[{
         "_index":"schools_gov", "_type":"school", "_id":"2", "_score":0.30685282, 
         "_source":{
            "name":"Government School", "description":"State Board Afiliation",
            "street":"Hinjewadi", "city":"Pune", "state":"MH", "zip":"411057",
            "location":[18.599752, 73.6821995], "fees":500, 
            "tags":["Great Sports"], "rating":"4"
         }
      }]
   }
}

запрос multi_match

Этот запрос соответствует тексту или фразе с более чем одним полем. Например,

POST http://localhost:9200/schools*/_search

Тело запроса

{
   "query":{
      "multi_match" : {
         "query": "hyderabad",
         "fields": [ "city", "state" ]
      }
   }
}

отклик

{
   "took":16, "timed_out":false, "_shards":{"total":10, "successful":10, "failed":0},
   "hits":{
      "total":1, "max_score":0.09415865, "hits":[{
         "_index":"schools_gov", "_type":"school", "_id":"1", "_score":0.09415865,
         "_source":{
            "name":"Model School", " description":"CBSE Affiliation", 
            "street":"silk city", "city":"Hyderabad", "state":"AP", 
            "zip":"500030", "location":[17.3903703, 78.4752129], "fees":700, 
            "tags":["Senior Secondary", "beautiful campus"], "rating":"3"
         }
      }]
   }
}

Query String Query

Этот запрос использует синтаксический анализатор запроса и ключевое слово query_string. Например,

POST http://localhost:9200/schools/_search

Тело запроса

{
   "query":{
      "query_string":{
         "query":"good faculty"
      }
   }
}

отклик

{
   "took":16, "timed_out":false, "_shards":{"total":10, "successful":10, "failed":0}, 
   "hits":{
      "total":1, "max_score":0.09492774, "hits":[{
         "_index":"schools", "_type":"school", "_id":"2", "_score":0.09492774, 
         "_source":{
            "name":"Saint Paul School", "description":"ICSE Affiliation",
            "street":"Dawarka", "city":"Delhi", "state":"Delhi",
            "zip":"110075", "location":[28.5733056, 77.0122136],
            "fees":5000, "tags":["Good Faculty", "Great Sports"],
            "rating":"4.5" 
         }
      }]
   }
}

Запросы на уровне семестра

Эти запросы в основном касаются структурированных данных, таких как числа, даты и электронные значения. Например,

POST http://localhost:9200/schools/_search

Тело запроса

{
   "query":{
      "term":{"zip":"176115"}
   }
}

отклик

{
   "took":1, "timed_out":false, "_shards":{"total":10, "successful":10, "failed":0},
   "hits":{
      "total":1, "max_score":0.30685282, "hits":[{
         "_index":"schools", "_type":"school", "_id":"1", "_score":0.30685282,
         "_source":{
            "name":"Central School", "description":"CBSE Affiliation",
            "street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115",
            "location":[31.8955385, 76.8380405], "fees":2200, 
            "tags":["Senior Secondary", "beautiful campus"], "rating":"3.3"
         }
      }]
   }
}

Range Query

Этот запрос используется для поиска объектов, имеющих значения между диапазонами значений. Для этого нам нужно использовать такие операторы, как —

  • gte — больше чем равно

  • GT — больше, чем

  • lte — меньше чем равно

  • менее чем

gte — больше чем равно

GT — больше, чем

lte — меньше чем равно

менее чем

Например,

POST http://localhost:9200/schools*/_search

Тело запроса

{
   "query":{
      "range":{
         "rating":{
            "gte":3.5
         }
      }
   }
}

отклик

{
   "took":31, "timed_out":false, "_shards":{"total":10, "successful":10, "failed":0},
   "hits":{
      "total":3, "max_score":1.0, "hits":[
         {
            "_index":"schools", "_type":"school", "_id":"2", "_score":1.0,
            "_source":{
               "name":"Saint Paul School", "description":"ICSE Affiliation",
               "street":"Dawarka", "city":"Delhi", "state":"Delhi", 
               "zip":"110075", "location":[28.5733056, 77.0122136], "fees":5000, 
               "tags":["Good Faculty", "Great Sports"], "rating":"4.5"
            }
         }, 
		
         {
            "_index":"schools_gov", "_type":"school", "_id":"2", "_score":1.0, 
            "_source":{
               "name":"Government School", "description":"State Board Affiliation",
               "street":"Hinjewadi", "city":"Pune", "state":"MH", "zip":"411057",
               "location":[18.599752, 73.6821995] "fees":500, 
               "tags":["Great Sports"], "rating":"4"
            }
         },
			
         {
            "_index":"schools", "_type":"school", "_id":"3", "_score":1.0,
            "_source":{
               "name":"Crescent School", "description":"State Board Affiliation",
               "street":"Tonk Road", "city":"Jaipur", "state":"RJ", "zip":"176114", 
               "location":[26.8535922, 75.7923988], "fees":2500,
               "tags":["Well equipped labs"], "rating":"4.5"
            }
         }
      ]
   }
}

Другие типы запросов на уровне терминов:

  • Запрос Exists — если определенное поле имеет ненулевое значение.

  • Отсутствующий запрос — это полностью противоположно существующему запросу, этот запрос ищет объекты без определенных полей или полей, имеющих нулевое значение.

  • Запрос с подстановочными знаками или регулярными выражениями — этот запрос использует регулярные выражения для поиска шаблонов в объектах.

Запрос Exists — если определенное поле имеет ненулевое значение.

Отсутствующий запрос — это полностью противоположно существующему запросу, этот запрос ищет объекты без определенных полей или полей, имеющих нулевое значение.

Запрос с подстановочными знаками или регулярными выражениями — этот запрос использует регулярные выражения для поиска шаблонов в объектах.

Тип запроса — документы с определенным типом. Например,

POST http://localhost:9200/schools*/_search

Тело запроса

{
   "query":{
      "type" : {
         "value" : "school"
      }
   }
}

отклик

Все школьные объекты JSON присутствуют в указанных индексах.

Сложные Запросы

Эти запросы представляют собой набор различных запросов, объединенных друг с другом с использованием логических операторов, таких как и, или, нет, или для разных индексов, или с помощью вызовов функций и т. Д. Например,

POST http://localhost:9200/schools*/_search

Тело запроса

{
   "query":{
      "filtered":{
         "query":{
            "match":{
               "state":"UP"
            }
         },
			
         "filter":{
            "range":{
               "rating":{
                  "gte":4.0
               }
            }
         }
      }
   }
}

отклик

{
   "took":16, "timed_out":false, "_shards":{"total":10, "successful":10, "failed":0},
   "hits":{"total":0, "max_score":null, "hits":[]}
}

Присоединение к запросам

Эти запросы используются там, где включено более одного сопоставления или документа. Существует два типа присоединяющихся запросов:

Вложенный запрос

Эти запросы имеют дело с вложенным отображением (вы узнаете об этом подробнее в следующей главе).

запросы has_child и has_parent

Эти запросы используются для получения дочернего или родительского документа, который получил совпадение в запросе. Например,

POST http://localhost:9200/tutorials/_search

Тело запроса

{
   "query":
   {
      "has_child" : {
         "type" : "article", "query" : {
            "match" : {
               "Text" : "This is article 1 of chapter 1"
            }
         }
      }
   }
}

отклик

{
   "took":21, "timed_out":false, "_shards":{"total":5, "successful":5, "failed":0},
   "hits":{
      "total":1, "max_score":1.0, "hits":[{
         "_index":"tutorials", "_type":"chapter", "_id":"1", "_score":1.0,
         "_source":{
            "Text":"this is chapter one"
         }
      }]
   }
}

Geo Queries

Эти запросы касаются географических местоположений и географических точек. Эти запросы помогают обнаружить школы или любой другой географический объект рядом с любым местоположением. Вам необходимо использовать тип данных Geo Point. Например,

POST http://localhost:9200/schools*/_search

Тело запроса

{
   "query":{
      "filtered":{
         "filter":{
            "geo_distance":{
               "distance":"100km",
               "location":[32.052098, 76.649294]
            }
         }
      }
   }
}

отклик

{
   "took":6, "timed_out":false, "_shards":{"total":10, "successful":10, "failed":0},
   "hits":{
      "total":2, "max_score":1.0, "hits":[
         {
            "_index":"schools", "_type":"school", "_id":"2", "_score":1.0,
            "_source":{
               "name":"Saint Paul School", "description":"ICSE Affiliation",
               "street":"Dawarka", "city":"Delhi", "state":"Delhi", "zip":"110075",
               "location":[28.5733056, 77.0122136], "fees":5000,
               "tags":["Good Faculty", "Great Sports"], "rating":"4.5"
            }
         },
		
         {
            "_index":"schools", "_type":"school", "_id":"1", "_score":1.0,
            "_source":{
               "name":"Central School", "description":"CBSE Affiliation",
               "street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115",
               "location":[31.8955385, 76.8380405], "fees":2000,
               "tags":["Senior Secondary", "beautiful campus"], "rating":"3.5"
            }
         }
      ]
   }
}

Примечание. Если при выполнении вышеприведенного примера вы получили исключение, добавьте следующее сопоставление в свой индекс.

{
   "mappings":{
      "school":{
         "_all":{
            "enabled":true
         },
			
         "properties":{
            "location":{
               "type":"geo_point"
            }
         }
      }
   }
}

Elasticsearch — картография

Отображение — это схема документов, хранящихся в индексе. Он определяет тип данных, такой как geo_point или string, и формат полей, представленных в документах, и правила для управления отображением динамически добавляемых полей. Например,

POST http://localhost:9200/bankaccountdetails

Тело запроса

{
   "mappings":{
      "report":{
         "_all":{
            "enabled":true
         },
			
         "properties":{
            "name":{ "type":"string"}, "date":{ "type":"date"},
            "balance":{ "type":"double"}, "liability":{ "type":"double"}
         }
      }
   }
}

отклик

{"acknowledged":true}

Типы данных поля

Elasticsearch поддерживает несколько различных типов данных для полей в документе. Следующие типы данных используются для хранения полей в Elasticsearch —

Основные типы данных

Это основные типы данных, поддерживаемые почти всеми системами, такими как целочисленные, длинные, двойные, короткие, байтовые, двойные, с плавающей запятой, строки, даты, логические и двоичные.

Сложные типы данных

Эти типы данных являются комбинацией основных типов данных. Как массив, объект JSON и вложенный тип данных. Ниже приведен пример вложенного типа данных:

POST http://localhost:9200/tabletennis/team/1

Тело запроса

{
   "group" : "players",
   "user" : [
      {
         "first" : "dave", "last" : "jones"
      },
		
      {
         "first" : "kevin", "last" : "morris"
      }
		
   ]
}

отклик

{
   "_index":"tabletennis", "_type":"team", "_id":"1", "_version":1, 
   "_shards":{"total":2, "successful":1, "failed":0}, "created":true
}

Типы гео данных

Эти типы данных используются для определения географических свойств. Например, geo_point используется для определения долготы и широты, а geo_shape для определения различных геометрических фигур, таких как прямоугольник.

Специализированные типы данных

Эти типы данных используются для специальных целей, например, IPv4 («ip») принимает IP-адрес, тип данных завершения используется для поддержки предложений автозаполнения и token_count для подсчета количества токенов в строке.

Типы картографирования

Каждый индекс имеет один или несколько типов отображения, которые используются для разделения документов индекса на логические группы. Отображение может отличаться друг от друга на основе следующих параметров —

Мета-Поля

Эти поля предоставляют информацию о сопоставлениях и других объектах, связанных с ним. Как и поля _index, _type, _id и _source.

поля

Разное отображение содержит разное количество полей и полей с разными типами данных.

Динамическое картографирование

Elasticsearch предоставляет удобный для пользователя механизм автоматического создания картографирования. Пользователь может опубликовать данные непосредственно в любое неопределенное сопоставление, и Elasticsearch автоматически создаст сопоставление, которое называется динамическим сопоставлением. Например,

POST http://localhost:9200/accountdetails/tansferreport

Тело запроса

{
   "from_acc":"7056443341", "to_acc":"7032460534",
   "date":"11/1/2016", "amount":10000
}

отклик

{
   "_index":"accountdetails", "_type":"tansferreport",
   "_id":"AVI3FeH0icjGpNBI4ake", "_version":1,
   "_shards":{"total":2, "successful":1, "failed":0},
   "created":true
}

Параметры отображения

Параметры сопоставления определяют структуру сопоставления, информацию о полях и о хранилище и то, как сопоставленные данные будут анализироваться во время поиска. Это следующие параметры отображения —

  • анализатор
  • увеличение
  • принуждать
  • скопировать в
  • doc_values
  • динамический
  • включен
  • fielddata
  • geohash
  • geohash_precision
  • geohash_prefix
  • формат
  • ignore_above
  • ignore_malformed
  • include_in_all
  • index_options
  • lat_lon
  • индекс
  • поля
  • нормы
  • null_value
  • position_increment_gap
  • свойства
  • search_analyzer
  • сходство
  • хранить
  • term_vector

Elasticsearch — Анализ

Когда запрос обрабатывается во время операции поиска, контент в любом индексе анализируется модулем анализа. Этот модуль состоит из анализатора, токенизатора, токен-фильтров и charfilters. Если анализатор не определен, то по умолчанию встроенные анализаторы, токены, фильтры и токенизаторы регистрируются в модуле анализа. Например.

POST http://localhost:9200/pictures

Тело запроса

{
   "settings": {
      "analysis": {
         "analyzer": {
            "index_analyzer": {
               "tokenizer": "standard", "filter": [
                  "standard", "my_delimiter", "lowercase", "stop", 
                     "asciifolding", "porter_stem"
               ]
            },
				
            "search_analyzer": {
               "tokenizer": "standard", "filter": [
                  "standard", "lowercase", "stop", "asciifolding", "porter_stem"
               ]
            }
         },
			
         "filter": {
            "my_delimiter": {
               "type": "word_delimiter",
               "generate_word_parts": true,
               "catenate_words": true,
               "catenate_numbers": true,
               "catenate_all": true,
               "split_on_case_change": true,
               "preserve_original": true,
               "split_on_numerics": true,
               "stem_english_possessive": true
            }
         }
      }
   }
}

Анализаторы

Анализатор состоит из токенизатора и дополнительных токен-фильтров. Эти анализаторы регистрируются в модуле анализа с логическими именами, на которые можно ссылаться либо в определениях отображения, либо в некоторых API. Есть ряд анализаторов по умолчанию следующим образом:

Sr.No Анализатор и описание
1

Стандартный анализатор (стандартный)

Для этого анализатора могут быть установлены параметры стоп-слов и max_token_length. По умолчанию список стоп-слов пуст, а max_token_length — 255.

2

Простой анализатор (простой)

Этот анализатор состоит из токенайзера в нижнем регистре.

3

Анализатор пробелов (пробелы)

Этот анализатор состоит из пробел-токенизатор.

4

Стоп анализатор (стоп)

stopwords и stopwords_path могут быть настроены. По умолчанию стоп-слова инициализированы английскими стоп-словами, а stopwords_path содержит путь к текстовому файлу со стоп-словами.

5

Анализатор ключевых слов (ключевое слово)

Этот анализатор токенизирует весь поток как один токен. Может использоваться для почтового индекса.

6

Анализатор паттернов (pattern)

Этот анализатор в основном работает с регулярными выражениями. В этом анализаторе можно установить такие параметры, как строчные буквы, шаблон, флаги, стоп-слова.

7

Анализатор языка

Этот анализатор имеет дело с такими языками, как хинди, арабский, ducth и т. Д.

8

Снежок анализатор (снежный ком)

Этот анализатор использует стандартный токенизатор со стандартным фильтром, строчным фильтром, стоп-фильтром и фильтром снежного кома.

9

Пользовательский анализатор (custom)

Этот анализатор используется для создания настраиваемого анализатора с токенизатором с дополнительными фильтрами токенов и фильтрами символов. В этом анализаторе можно настроить такие параметры, как токенизатор, фильтр, char_filter и position_increment_gap.

Стандартный анализатор (стандартный)

Для этого анализатора могут быть установлены параметры стоп-слов и max_token_length. По умолчанию список стоп-слов пуст, а max_token_length — 255.

Простой анализатор (простой)

Этот анализатор состоит из токенайзера в нижнем регистре.

Анализатор пробелов (пробелы)

Этот анализатор состоит из пробел-токенизатор.

Стоп анализатор (стоп)

stopwords и stopwords_path могут быть настроены. По умолчанию стоп-слова инициализированы английскими стоп-словами, а stopwords_path содержит путь к текстовому файлу со стоп-словами.

Анализатор ключевых слов (ключевое слово)

Этот анализатор токенизирует весь поток как один токен. Может использоваться для почтового индекса.

Анализатор паттернов (pattern)

Этот анализатор в основном работает с регулярными выражениями. В этом анализаторе можно установить такие параметры, как строчные буквы, шаблон, флаги, стоп-слова.

Анализатор языка

Этот анализатор имеет дело с такими языками, как хинди, арабский, ducth и т. Д.

Снежок анализатор (снежный ком)

Этот анализатор использует стандартный токенизатор со стандартным фильтром, строчным фильтром, стоп-фильтром и фильтром снежного кома.

Пользовательский анализатор (custom)

Этот анализатор используется для создания настраиваемого анализатора с токенизатором с дополнительными фильтрами токенов и фильтрами символов. В этом анализаторе можно настроить такие параметры, как токенизатор, фильтр, char_filter и position_increment_gap.

Tokenizers

Токенайзеры используются для генерации токенов из текста в Elasticsearch. Текст может быть разбит на токены с учетом пробелов и других знаков препинания. Elasticsearch имеет множество встроенных токенизаторов, которые можно использовать в специальном анализаторе.

Sr.No Токенайзер и описание
1

Стандартный токенизатор (стандартный)

Это основано на основанном на грамматике токенизаторе, и для него можно настроить max_token_length.

2

Edge NGram токенизатор (edgeNGram)

Настройки, такие как min_gram, max_gram, token_chars, могут быть установлены для этого токенизатора.

3

Ключевое слово токенизатор (ключевое слово)

Это генерирует весь ввод в качестве вывода, и для этого можно установить параметр buffer_size.

4

Письмо токенизатор (письмо)

Это захватывает все слово, пока не встретится не буква.

5

Строчный токенизатор (строчные)

Это работает так же, как токенайзер букв, но после создания токенов меняет их на строчные.

6

NGram Tokenizer (нГрам)

Для этого токенизатора можно установить такие параметры, как min_gram (значение по умолчанию — 1), max_gram (значение по умолчанию — 2) и token_chars.

7

Токенайзер пробелов (пробелы)

Это делит текст на основе пробелов.

8

Шаблонный токенизатор (шаблон)

Это использует регулярные выражения в качестве разделителя токенов. Шаблон, флаги и групповые настройки могут быть установлены для этого токенизатора.

9

Токенайзер URL-адреса электронной почты UAX (uax_url_email)

Это работает так же, как стандартный токенизатор, но обрабатывает электронную почту и URL как один токен.

10

Токенайзер иерархии путей (path_hierarchy)

Этот токенизатор сгенерировал все возможные пути, присутствующие во входном пути каталога. Настройки, доступные для этого токенизатора: разделитель (по умолчанию /), замена, buffer_size (по умолчанию 1024), обратный (по умолчанию false) и пропуск (по умолчанию 0).

11

Классический токенизатор (classic)

Это работает на основе грамматических токенов. max_token_length может быть установлен для этого токенизатора.

12

Тайский токенизатор (тайский)

Этот токенизатор используется для тайского языка и использует встроенный тайский алгоритм сегментации.

Стандартный токенизатор (стандартный)

Это основано на основанном на грамматике токенизаторе, и для него можно настроить max_token_length.

Edge NGram токенизатор (edgeNGram)

Настройки, такие как min_gram, max_gram, token_chars, могут быть установлены для этого токенизатора.

Ключевое слово токенизатор (ключевое слово)

Это генерирует весь ввод в качестве вывода, и для этого можно установить параметр buffer_size.

Письмо токенизатор (письмо)

Это захватывает все слово, пока не встретится не буква.

Строчный токенизатор (строчные)

Это работает так же, как токенайзер букв, но после создания токенов меняет их на строчные.

NGram Tokenizer (нГрам)

Для этого токенизатора можно установить такие параметры, как min_gram (значение по умолчанию — 1), max_gram (значение по умолчанию — 2) и token_chars.

Токенайзер пробелов (пробелы)

Это делит текст на основе пробелов.

Шаблонный токенизатор (шаблон)

Это использует регулярные выражения в качестве разделителя токенов. Шаблон, флаги и групповые настройки могут быть установлены для этого токенизатора.

Токенайзер URL-адреса электронной почты UAX (uax_url_email)

Это работает так же, как стандартный токенизатор, но обрабатывает электронную почту и URL как один токен.

Токенайзер иерархии путей (path_hierarchy)

Этот токенизатор сгенерировал все возможные пути, присутствующие во входном пути каталога. Настройки, доступные для этого токенизатора: разделитель (по умолчанию /), замена, buffer_size (по умолчанию 1024), обратный (по умолчанию false) и пропуск (по умолчанию 0).

Классический токенизатор (classic)

Это работает на основе грамматических токенов. max_token_length может быть установлен для этого токенизатора.

Тайский токенизатор (тайский)

Этот токенизатор используется для тайского языка и использует встроенный тайский алгоритм сегментации.

Фильтры токенов

Токен-фильтры получают входные данные от токенайзеров, и затем эти фильтры могут изменять, удалять или добавлять текст в этот вход. Elasticsearch предлагает множество встроенных токен-фильтров. Большинство из них уже были объяснены в предыдущих разделах.

Фильтры персонажей

Эти фильтры обрабатывают текст перед токенизаторами. Символьные фильтры ищут специальные символы или теги html или указанный шаблон, а затем либо удаляют, либо меняют их на подходящие слова, такие как ‘&’, и удаляют теги разметки html. Вот пример анализатора с синонимом, указанным в synonym.txt —

{
   "settings":{
      "index":{
         "analysis":{
            "analyzer":{
               "synonym":{
                  "tokenizer":"whitespace", "filter":["synonym"]
               }
            },
				
            "filter":{
               "synonym":{
                  "type":"synonym", "synonyms_path":"synonym.txt", "ignore_case":"true"
               }
            }
         }
      }
   }
}

Elasticsearch — Модули

Elasticsearch состоит из ряда модулей, которые отвечают за его функциональность. Эти модули имеют следующие два типа настроек —

  • Статические настройки — эти параметры необходимо настроить в файле config (asticsearch.yml) перед запуском Elasticsearch. Необходимо обновить все узлы концерна в кластере, чтобы отразить изменения этих параметров.

  • Динамические настройки — эти настройки могут быть установлены на активном Elasticsearch.

Статические настройки — эти параметры необходимо настроить в файле config (asticsearch.yml) перед запуском Elasticsearch. Необходимо обновить все узлы концерна в кластере, чтобы отразить изменения этих параметров.

Динамические настройки — эти настройки могут быть установлены на активном Elasticsearch.

Мы обсудим различные модули Elasticsearch в следующих разделах этой главы.

Маршрутизация на уровне кластера и распределение осколков

Настройки уровня кластера определяют распределение сегментов для разных узлов и перераспределение сегментов для перебалансировки кластера. Это следующие настройки для управления распределением сегментов —

Распределение осколков на уровне кластера

настройка Возможное значение Описание
cluster.routing.allocation.enable
все Это значение по умолчанию разрешает распределение фрагментов для всех видов фрагментов.
праймериз Это позволяет распределять осколки только для первичных осколков.
new_primaries Это позволяет распределять сегменты только для основных сегментов для новых индексов.
никто Это не позволяет распределять осколки.
cluster.routing.allocation .node_concurrent_recoveries Числовое значение (по умолчанию 2) Это ограничивает количество одновременного восстановления осколка.
cluster.routing.allocation .node_initial_primaries_recoveries Числовое значение (по умолчанию 4) Это ограничивает количество параллельных начальных первичных восстановлений.
cluster.routing.allocation .same_shard.host Логическое значение (по умолчанию false) Это ограничивает размещение более одной реплики одного и того же шарда в одном физическом узле.
indices.recovery.concurrent _streams Числовое значение (по умолчанию 3) Это контролирует количество открытых сетевых потоков на узел во время восстановления сегментов от одноранговых сегментов.
indices.recovery.concurrent _small_file_streams Числовое значение (по умолчанию 2) Это контролирует количество открытых потоков на узел для небольших файлов, имеющих размер менее 5 Мб во время восстановления сегмента.
cluster.routing.rebalance.enable
все Это значение по умолчанию позволяет балансировать для всех видов шардов.
праймериз Это позволяет балансировать осколки только для основных осколков.
реплики Это позволяет балансировать осколки только для осколков реплики.
никто Это не допускает какой-либо балансировки осколков.
cluster.routing.allocation .allow_rebalance
всегда Это значение по умолчанию всегда позволяет перебалансировать.
indices_primaries _active Это позволяет перебалансировать, когда выделены все основные сегменты в кластере.
Indices_all_active Это позволяет перебалансировать, когда выделены все основные и повторяющиеся фрагменты.
cluster.routing.allocation.cluster _concurrent_rebalance Числовое значение (по умолчанию 2) Это ограничивает количество одновременных балансировок сегментов в кластере.
cluster.routing.allocation .balance.shard Значение с плавающей запятой (по умолчанию 0.45f) Это определяет весовой коэффициент для сегментов, выделенных на каждом узле.
cluster.routing.allocation .balance.index Значение с плавающей запятой (по умолчанию 0.55f) Это определяет отношение количества сегментов на индекс, выделенных на конкретном узле.
cluster.routing.allocation .balance.threshold Не отрицательное значение с плавающей запятой (по умолчанию 1.0f) Это минимальное значение оптимизации операций, которые должны быть выполнены.

Дисковое распределение осколков

настройка Возможное значение Описание
cluster.routing.allocation .disk.threshold_enabled Логическое значение (по умолчанию true) Это включает и отключает определение распределения диска.
cluster.routing.allocation .disk.watermark.low Строковое значение (по умолчанию 85%) Это обозначает максимальное использование диска; после этой точки никакие другие осколки не могут быть назначены этому диску.
cluster.routing.allocation .disk.watermark.high Строковое значение (по умолчанию 90%) Это обозначает максимальное использование во время распределения; если эта точка достигнута во время выделения, Elasticsearch выделит этот фрагмент на другой диск.
cluster.info.update.interval Строковое значение (по умолчанию 30 с) Это интервал между проверками использования диска.
cluster.routing.allocation .disk.include_relocations Логическое значение (по умолчанию true) Это решает, следует ли учитывать сегменты, выделяемые в данный момент, при расчете использования диска.

открытие

Этот модуль помогает кластеру обнаруживать и поддерживать состояние всех узлов в нем. Состояние кластера изменяется, когда узел добавляется или удаляется из кластера. Параметр имени кластера используется для создания логической разницы между различными кластерами. Есть несколько модулей, которые помогают вам использовать API, предоставляемые поставщиками облачных решений, а именно:

  • Лазурное открытие
  • EC2 открытие
  • Google Compute Engine Discovery
  • Открытие дзен

шлюз

Этот модуль поддерживает состояние кластера и данные сегмента при полной перезагрузке кластера. Ниже приведены статические настройки этого модуля —

настройка Возможное значение Описание
gateway.expected_ узлы числовое значение (по умолчанию 0) Число узлов, которые должны находиться в кластере для восстановления локальных сегментов.
gateway.expected_ master_nodes числовое значение (по умолчанию 0) Число главных узлов, которые должны находиться в кластере до начала восстановления.
gateway.expected_ data_nodes числовое значение (по умолчанию 0) Число ожидаемых узлов данных в кластере до начала восстановления.
gateway.recover_ after_time Строковое значение (по умолчанию 5м) Это указывает время, в течение которого процесс восстановления будет ожидать запуска, независимо от количества узлов, подключенных в кластере.

  • gateway.recover_ after_nodes
  • gateway.recover_after_ master_nodes
  • gateway.recover_after_ data_nodes

HTTP

Этот модуль управляет связью между HTTP-клиентом и API Elasticsearch. Этот модуль можно отключить, изменив значение http.enabled на false. Ниже приведены настройки (настроенные вasticsearch.yml) для управления этим модулем.

Sr.No Настройка и описание
1

http.port

Это порт для доступа к Elasticsearch, и он варьируется от 9200 до 9300.

2

http.publish_port

Этот порт предназначен для клиентов http и также полезен в случае брандмауэра.

3

http.bind_host

Это адрес хоста для службы http.

4

http.publish_host

Это адрес хоста для http-клиента.

5

http.max_content_length

Это максимальный размер содержимого в запросе http. Его значение по умолчанию составляет 100 МБ.

6

http.max_initial_line_length

Это максимальный размер URL, и его значение по умолчанию составляет 4 КБ.

7

http.max_header_size

Это максимальный размер заголовка http, и его значение по умолчанию составляет 8 КБ.

8

http.compression

Это включает или отключает поддержку сжатия, и его значением по умолчанию является false.

9

http.pipelinig

Это включает или отключает HTTP конвейерную обработку.

10

http.pipelining.max_events

Это ограничивает количество событий, которые должны быть поставлены в очередь перед закрытием HTTP-запроса.

http.port

Это порт для доступа к Elasticsearch, и он варьируется от 9200 до 9300.

http.publish_port

Этот порт предназначен для клиентов http и также полезен в случае брандмауэра.

http.bind_host

Это адрес хоста для службы http.

http.publish_host

Это адрес хоста для http-клиента.

http.max_content_length

Это максимальный размер содержимого в запросе http. Его значение по умолчанию составляет 100 МБ.

http.max_initial_line_length

Это максимальный размер URL, и его значение по умолчанию составляет 4 КБ.

http.max_header_size

Это максимальный размер заголовка http, и его значение по умолчанию составляет 8 КБ.

http.compression

Это включает или отключает поддержку сжатия, и его значением по умолчанию является false.

http.pipelinig

Это включает или отключает HTTP конвейерную обработку.

http.pipelining.max_events

Это ограничивает количество событий, которые должны быть поставлены в очередь перед закрытием HTTP-запроса.

индексы

Этот модуль поддерживает настройки, которые установлены глобально для каждого индекса. Следующие настройки в основном связаны с использованием памяти —

Выключатель

Это используется для предотвращения возникновения операции OutOfMemroyError. Этот параметр в основном ограничивает размер кучи JVM. Например, параметр indices.breaker.total.limit, который по умолчанию равен 70% кучи JVM.

Кэш полевых данных

Это используется в основном при агрегировании на поле. Рекомендуется иметь достаточно памяти, чтобы выделить его. Объем памяти, используемой для кэширования полевых данных, можно контролировать с помощью параметра indices.fielddata.cache.size.

Node Query Cache

Эта память используется для кэширования результатов запроса. Этот кэш использует политику выселения из недавно использованных (LRU). Параметр Indices.queries.cahce.size контролирует объем памяти этого кэша.

Индексный буфер

Этот буфер хранит вновь созданные документы в индексе и очищает их, когда буфер заполнен. Установка как indices.memory.index_buffer_size контролирует количество кучи, выделенной для этого буфера.

Кеш запроса Shard

Этот кеш используется для хранения локальных данных поиска для каждого шарда. Кеш можно включить при создании индекса или отключить, отправив параметр URL.

Disable cache - ?request_cache = true
Enable cache "index.requests.cache.enable": true

Восстановление индексов

Он контролирует ресурсы во время процесса восстановления. Ниже приведены настройки —

настройка Значение по умолчанию
indices.recovery.concurrent_streams 3
indices.recovery.concurrent_small_file_streams 2
indices.recovery.file_chunk_size 512kb
indices.recovery.translog_ops 1000
indices.recovery.translog_size 512kb
indices.recovery.compress правда
indices.recovery.max_bytes_per_sec 40MB

TTL Интервал

Интервал времени жизни (TTL) определяет время документа, после которого документ удаляется. Ниже приведены динамические настройки для управления этим процессом —

настройка Значение по умолчанию
indices.ttl.interval 60-е годы
indices.ttl.bulk_size 1000

Узел

Каждый узел имеет возможность быть узлом данных или нет. Вы можете изменить это свойство, изменив параметр node.data . Установка значения как ложного определяет, что узел не является узлом данных.

Elasticsearch — Тестирование

Elasticsearch предоставляет файл jar, который можно добавить в любую среду Java и можно использовать для тестирования кода, связанного с Elasticsearch. Диапазон тестов может быть выполнен с использованием платформы, предоставляемой Elasticsearch —

  • Модульное тестирование
  • Интеграционное тестирование
  • Рандомизированное тестирование

Чтобы начать тестирование, вам нужно добавить в программу зависимость тестирования Elasticsearch. Вы можете использовать maven для этой цели и добавить следующее в pom.xml.

<dependency>
   <groupId>org.elasticsearch</groupId>
   <artifactId>elasticsearch</artifactId>
   <version>2.1.0</version>
</dependency>

EsSetup был инициализирован для запуска и остановки узла Elasticsearch, а также для создания индексов.

EsSetup esSetup = new EsSetup ();

Функция esSetup.execute () с createIndex создаст индексы, вам нужно указать настройки, тип и данные.

Модульное тестирование

Модульное тестирование выполняется с использованием среды тестирования JUnit и Elasticsearch. Узлы и индексы могут быть созданы с использованием классов Elasticsearch и в тестовом методе могут использоваться для выполнения тестирования. Для этого тестирования используются классы ESTestCase и ESTokenStreamTestCase.

Интеграционное тестирование

Интеграционное тестирование использует несколько узлов в кластере. Класс ESIntegTestCase используется для этого тестирования. Существуют различные методы, облегчающие подготовку теста.

Sr.No Метод и описание
1

обновить ()

Все индексы в кластере обновлены

2

ensureGreen ()

Обеспечивает состояние кластера зеленого здоровья

3

ensureYellow ()

Гарантирует состояние желтого кластера здоровья

4

CreateIndex (имя)

Создать индекс с именем, переданным этому методу

5

промывать()

Все индексы в кластере сброшены

6

flushAndRefresh ()

flush () и refresh ()

7

indexExists (имя)

Проверяет существование указанного индекса

8

clusterService ()

Возвращает кластерный сервисный Java-класс

9

Кластер ()

Возвращает класс тестового кластера.

обновить ()

Все индексы в кластере обновлены

ensureGreen ()

Обеспечивает состояние кластера зеленого здоровья

ensureYellow ()

Гарантирует состояние желтого кластера здоровья

CreateIndex (имя)

Создать индекс с именем, переданным этому методу

промывать()

Все индексы в кластере сброшены

flushAndRefresh ()

flush () и refresh ()

indexExists (имя)

Проверяет существование указанного индекса

clusterService ()

Возвращает кластерный сервисный Java-класс

Кластер ()

Возвращает класс тестового кластера.

Методы тестового кластера

Sr.No Метод и описание
1

ensureAtLeastNumNodes (п)

Гарантирует, что минимальное количество узлов в кластере больше или равно указанному количеству.

2

ensureAtMostNumNodes (п)

Гарантирует, что максимальное количество узлов в кластере меньше или равно указанному количеству.

3

stopRandomNode ()

Чтобы остановить случайный узел в кластере

4

stopCurrentMasterNode ()

Чтобы остановить мастер-узел

5

stopRandomNonMaster ()

Чтобы остановить случайный узел в кластере, который не является главным узлом

6

buildNode ()

Создать новый узел

7

startNode (настройки)

Начать новый узел

8

nodeSettings ()

Переопределите этот метод для изменения настроек узла

ensureAtLeastNumNodes (п)

Гарантирует, что минимальное количество узлов в кластере больше или равно указанному количеству.

ensureAtMostNumNodes (п)

Гарантирует, что максимальное количество узлов в кластере меньше или равно указанному количеству.

stopRandomNode ()

Чтобы остановить случайный узел в кластере

stopCurrentMasterNode ()

Чтобы остановить мастер-узел

stopRandomNonMaster ()

Чтобы остановить случайный узел в кластере, который не является главным узлом

buildNode ()

Создать новый узел

startNode (настройки)

Начать новый узел

nodeSettings ()

Переопределите этот метод для изменения настроек узла

Доступ к клиентам

Клиент используется для доступа к различным узлам в кластере и выполнения некоторых действий. Метод ESIntegTestCase.client () используется для получения случайного клиента. Elasticsearch предлагает другие методы также для доступа к клиенту, и эти методы могут быть доступны с помощью метода ESIntegTestCase.internalCluster ().

Sr.No Метод и описание
1

итератора ()

Это поможет вам получить доступ ко всем доступным клиентам.

2

masterClient ()

Это возвращает клиента, который связывается с главным узлом.

3

nonMasterClient ()

Это возвращает клиента, который не связывается с главным узлом.

4

clientNodeClient ()

Это возвращает клиента в данный момент на клиентском узле.

итератора ()

Это поможет вам получить доступ ко всем доступным клиентам.

masterClient ()

Это возвращает клиента, который связывается с главным узлом.

nonMasterClient ()

Это возвращает клиента, который не связывается с главным узлом.

clientNodeClient ()

Это возвращает клиента в данный момент на клиентском узле.

Рандомизированное тестирование

Это тестирование используется для проверки кода пользователя со всеми возможными данными, чтобы в будущем не было сбоев с данными любого типа. Случайные данные — лучший вариант для проведения этого тестирования.

Генерация случайных данных

В этом тестировании класс Random создается экземпляром, предоставленным RandomizedTest, и предлагает множество методов для получения различных типов данных.

метод Возвращаемое значение
getRandom () Экземпляр случайного класса
randomBoolean () Случайный логический
randomByte () Случайный байт
randomShort () Случайный короткий
randomInt () Случайное целое число
randomLong () Случайный длинный
randomFloat () Случайное плавание
randomDouble () Случайный двойной
randomLocale () Случайная локаль
randomTimeZone () Случайный часовой пояс
randomFrom () Случайный элемент из массива

Утверждения

Классы ElasticsearchAssertions и ElasticsearchGeoAssertions содержат утверждения, которые используются для выполнения некоторых общих проверок во время тестирования. Например,