Elasticsearch-api-conventions
Elasticsearch-APIの規則
WebのApplication Programming Interface(API)は、特定のWebアプリケーションのソフトウェアコンポーネントにアクセスするための関数呼び出しまたはその他のプログラミング命令のグループです。 たとえば、Facebook APIは、開発者がFacebookのデータやその他の機能にアクセスしてアプリケーションを作成するのに役立ちます。生年月日またはステータスの更新です。
Elasticsearchは、HTTP経由でJSONによってアクセスされるREST APIを提供します。 Elasticsearchでは、これから説明するいくつかの規則を使用します。
複数のインデックス
APIのほとんどの操作(主に検索などの操作)は、1つまたは複数のインデックス用です。 これにより、ユーザーはクエリを1回実行するだけで、複数の場所または利用可能なすべてのデータを検索できます。 複数のインデックスで操作を実行するには、多くの異なる表記法が使用されます。 この章では、そのうちのいくつかについて説明します。
カンマ区切り表記
POST/index1,index2,index3/_search
リクエスト本文
{
"query":{
"query_string":{
"query":"any_string"
}
}
}
応答
any_stringを含むindex1、index2、index3のJSONオブジェクト。
_allすべてのインデックスのキーワード
POST/_all/_search
リクエスト本文
{
"query":{
"query_string":{
"query":"any_string"
}
}
}
応答
すべてのインデックスからのJSONオブジェクトで、any_stringが含まれています。
ワイルドカード(*、+、–)
POST/school*/_search
リクエスト本文
{
"query":{
"query_string":{
"query":"CBSE"
}
}
}
応答
CBSEを含む学校で始まるすべてのインデックスからのJSONオブジェクト。
または、次のコードも使用できます-
POST/school*,-schools_gov/_search
リクエスト本文
{
"query":{
"query_string":{
"query":"CBSE"
}
}
}
応答
「school」で始まるすべてのインデックスからのJSONオブジェクト。schools_govからではなく、CBSEが含まれます。
また、いくつかのURLクエリ文字列パラメータがあります-
- ignore_unavailable -URLに存在する1つ以上のインデックスが存在しない場合、エラーは発生せず、操作も停止しません。 たとえば、学校のインデックスは存在しますが、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"
}
}
}
応答(エラーなし)
CBSEを含む学校で始まるすべてのインデックスからのJSONオブジェクト。
allow_no_indices
ワイルドカードを含むURLがインデックスを持たない場合、このパラメーターの true 値はエラーを防ぎます。 たとえば、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":[]}
}
expand_wildcards
このパラメーターは、ワイルドカードを開いたインデックスまたは閉じたインデックスに展開する必要があるか、両方を実行する必要があるかを決定します。 このパラメーターの値は、開いたり閉じたりすることができます。
例えば、近いインデックス学校-
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のインデックスには、2015年12月30日の銀行口座の詳細が格納されます。 数学演算を実行して、特定の日付または日付と時刻の範囲の詳細を取得できます。
日付数学インデックス名の形式-
<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のようなインデックスに日付が書き込まれる形式が含まれます。 今日の日付が2015年12月30日の場合、<accountdetail-\ {now-2d \ {YYYY.MM.dd}}>はaccountdetail-2015.12.28を返します。
Expression | Resolves to |
---|---|
<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"
}
}
………………….
人間が読める出力
このオプションは、統計応答を人間が読める形式(人間= trueの場合)またはコンピューターが読める形式(人間= falseの場合)に変更できます。 たとえば、人間= trueの場合、distance_kilometer = 20KMであり、人間= falseの場合、distance_meter = 20000の場合、応答は別のコンピュータープログラムで使用する必要があります。
応答フィルタリング
field_pathパラメーターに追加することで、より少ないフィールドへの応答をフィルター処理できます。 例えば、
POST/schools/_search?filter_path = hits.total
リクエスト本文
{
"query":{
"match_all":{}
}
}
応答
{"hits":{"total":3}}