English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
API веб-приложения - это набор вызовов функций или других программных инструкций, используемых для доступа к программным компонентам определенного веб-приложения. Например, Facebook API помогает разработчикам создавать приложения, доступ к данным или функциям из Facebook; это может быть дата рождения или обновление статуса.
Elasticsearch предоставляет REST API, JSON можно получить через HTTP API. Elasticsearch использует некоторые соглашения, которые мы обсудим сейчас.
Большинство операций API,主要是 поиск и другие операции, направлены на один или несколько индексов. Это помогает пользователям выполнять один запрос, чтобы искать в нескольких местах или во всех доступных данных. Используются различные символы для выполнения операций в нескольких индексах. Мы обсудим некоторые из них в этой главе.
POST /index1,index2,index3/_search
{ "query":{ "query_string":{ "query":"any_string" } } }
JSON-объекты из index1, index2, index3, содержащие any_string.
POST /_all/_search
{ "query":{ "query_string":{ "query":"any_string" } } }
JSON-объекты из всех индексов, содержащих any_string.
POST /school*/_search
{ "query":{ "query_string":{ "query":"CBSE" } } }
JSON-объекты из всех индексов, начинающихся с школ, содержащих CBSE.
Кроме того, вы также можете использовать следующий код:
POST /school*,-schools_gov /_search
{ "query":{ "query_string":{ "query":"CBSE" } } }
JSON-объекты из всех индексов, начинающихся с "school", но не из "school_gov" и содержащих CBSE.
У还有一些 параметры URL запроса:
ignore_unavailableЕсли в URL индекса (индексов) отсутствует один или несколько, не произойдет ошибки или остановка операций. Например, индекс school существует, но book_shops не существует.
POST /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 /school*,book_shops/_search?ignore_unavailable = true
{ "query":{ "query_string":{ "query":"CBSE" } } }
JSON-объекты из всех индексов, начинающихся с школ, содержащих CBSE.
trueЕсли URL с подстановочным знаком не индексирован, значение этого параметра предотвратит ошибку. Например, индекс, не начинающийся с schools_pri, не существует.
POST /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":[]} }
Этот параметр определяет, нужно ли расширять wildcard до открытого или закрытого индекса, или выполнять оба действия. Значением этого параметра могут быть "открыть" и "закрыть", или его отсутствие.
Например, закрытие индекса школы -
POST /schools/_close
{"acknowledged":true}
Рассмотрим следующий код -
POST /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, индекс будет хранить детальную информацию о банковских счетах за 30 декабря 2015 года. Можно выполнять математические операции для получения информации о конкретной дате или диапазоне дат и времени.
Формат имен математических индексов даты -
<static_name{date_math_expr{date_format|time_zone}}> /<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-{now-d}> | accountdetail-2015.12.29 |
<accountdetail-{now-M}> | accountdetail-2015.11.30 |
<accountdetail-{now{YYYY.MM}}> | accountdetail-2015.12 |
Теперь мы рассмотрим некоторые часто используемые параметры Elasticsearch, которые можно использовать для получения ответа в заданном формате.
Мы можем добавить параметр запроса URL (например, pretty = true), чтобы получить ответ в хорошо структурированном формате JSON.
POST /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" } } …………...
Этот параметр позволяет изменить формат статистического ответа на читаемый человеком (если human = true) или машинный (если human = false). Например, если human = true, то distance_kilometer = 20KM; если human = false, то distance_meter = 20000, в этом случае потребуется использовать другие компьютерные программы для обработки ответа.
Добавляя их в параметр field_path, мы можем фильтровать ответы на менее часто используемые поля. Например,
POST /schools/_search?filter_path = hits.total
{ "query":{ "match_all":{} } }
{"hits":{"total":3}}