Учебники

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. Например,