English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Elasticsearch API約定

Webアプリケーションにプログラミングインターフェース(API)とは、特定のWebアプリケーション内のソフトウェアコンポーネントにアクセスするための一组の関数呼び出しや他のプログラミング命令です。例えば、Facebook APIはFacebookからのデータや他の機能にアクセスして、開発者がアプリを作成するのを助けます;それは誕生日やステータスの更新などです。

ElasticsearchはREST APIを提供しており、HTTPを通じてこのAPIにアクセスできます。Elasticsearchはいくつかの約束事を使用しており、これらについて説明します。

複数のインデックス

APIの多くの操作、主に検索や他の操作は、1つまたは複数のインデックスに対して行われます。これにより、ユーザーは一度のクエリで複数の場所やすべての利用可能なデータを検索できます。複数のインデックスで操作を行うためには、多くの異なるシンボルが使用されます。これらのシンボルのいくつかについて、本章で説明します。

コンマで区切られたシンボル

POST /index1,index2,index3/_search

リクエスト本文

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

応答

indexから来ます1, index2, index3のJSONオブジェクトにはany_stringが含まれています。

_all 全てのインデックスのキーワード

POST /_all/_search

リクエスト本文

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

応答

すべてのインデックスから来るJSONオブジェクト、それにはany_stringが含まれています。

ワイルドカード(*、+、–)

POST /*/_search

リクエスト本文

{
   "query":{
      
         
      }
   }
}

応答

CBSEを含む学校を始めるすべてのインデックスからのJSONオブジェクト

また、以下のコードを使用することもできます-

POST /*,-schools_gov /_search

リクエスト本文

{
   "query":{
      
         
      }
   }
}

応答

JSONオブジェクトは「school」で始まるすべてのインデックスから来ていますが、school_govから来ていないかつCBSEを含むインデックスから来ています。

まだURLクエリ文字列パラメータがあります-

  • ignore_unavailable−index(es)URLに存在しない一つまたは複数のインデックスがある場合、エラーは発生しませんまたは操作は停止します。例えば、schoolインデックスは存在しますが、book_shopsは存在しません。

POST /*/_search

リクエスト本文

{
   "query":{
      
         
      }
   }
}

リクエスト本文

{
   
      
         
         
         
      }],
      
      
      
   },404
}

以下のコードを考慮してください-

POST /*/

リクエスト本文

{
   "query":{
      
         
      }
   }
}

レスポンス(エラーなし)

CBSEを含む学校を始めるすべてのインデックスからのJSONオブジェクト

allow_no_indices

trueワイルドカードを含むURLにインデックスが無い場合、このパラメータの値はエラーを防ぎます。例えば、schools_priで始まるインデックスが無い場合-

POST /*/

リクエスト本文

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

レスポンス(エラーなし)

{
   1
   
}

expand_wildcards

このパラメータは、ワイルドカードがオープンインデックスや閉じたインデックスに拡張されるかどうか、または両方を同時に実行されるかどうかを決定します。このパラメータの値は、オープン、クローズ、またはどちらでもありません

例えば、インデックス学校を閉じます-

POST /schools/

応答

以下のコードを考慮してください-

POST /*/

リクエスト本文

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

応答

{
   
      
         
      }],
      
   }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。

表达解析为
<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}}