Elasticsearchは、私たちが豊かにサポートするために、このようにリクエストボディクエリ構文を使用しようとすることが示唆されました。
一般的な構文
まず、簡単な例を見てみましょう。この例では、すべての文書の2つの指標(映画や404_idx)を照会します。404_idxインデックスが存在しない場合は、理論的に、Elasticsearchはエラーを返します。しかし、ignore_unavailableパラメータに、実行は、インデックスが使用できなく無視されます。
-
# ignore_unavailable=
true,可以忽略尝试访问不存在的索引“
404_idx”导致的报错
-
POST /movies,
404_idx/_search?ignore_unavailable=
true
-
{
-
"profile":
true,
-
"query": {
-
"match_all": {}
-
}
-
}
1 from / size
ページネーション
また、使用することができます from / size
ページングの組み合わせを実装します。
-
POST /movies/_search
-
{
-
"from":
0,
-
"size":
20,
-
"query": {
-
"match_all": {}
-
}
-
}
2 sort
ソート
使用するsort
ソートを達成するために。あなたが複数のフィールドに同じ種類のSQL文のようなものが必要な場合は、複数の要素は、内部ソートに渡すことができます。
-
POST /movies/_search
-
{
-
"sort": [{
"year": {
"order":
"desc"}},
-
{
"id.keyword": {
"order":
"desc"}} ],
-
"from":
0,
-
"size":
20,
-
"query": {
-
"match_all": {}
-
}
-
}
3 _sourceフィルタ
あまりにも多くの結果がElasticsearchクエリ、それは実行の効率に影響を与えます。したがって、我々は、濾過_sourceの方法により、クエリフィールドを減らすことができます。
タイトルのみ属性を表示するには、次のクエリ
-
POST /movies/_search
-
{
-
"sort": [{
"year": {
"order":
"desc"}},
-
{
"id.keyword": {
"order":
"desc"}} ],
-
"from":
0,
-
"size":
20,
-
"_source": [
"title"],
-
"query": {
-
"match_all": {}
-
}
-
}
4スクリプトのフィールド
文字列の連結:Elasticsearchも、このメカニズムのような、スクリプトを介して、いくつかの簡単な操作を行うことができ、痛みのないスクリプトフィールドをサポートしています。オーダーのシナリオでは、注文はスクリプトで計算異なる為替レートを、持っている、我々は計算の結果をソートすることができます。
-
POST /movies/_search
-
{
-
"sort": [{
"year": {
"order":
"desc"}},
-
{
"id.keyword": {
"order":
"desc"}} ],
-
"from":
0,
-
"size":
20,
-
"query": {
-
"match_all": {}
-
}
-
,
"script_fields": {
-
"new_title": {
-
"script": {
-
"lang":
"painless",
-
"source":
"doc['year'].value+'hello'"
-
}
-
}
-
}
-
}
5試合の式文
1)クエリが一致し、クエリの内容があるか、デフォルトの方法。次のように:
-
POST /movies/_search
-
{
-
"query": {
-
"match": {
-
"title":
"last christmas"
-
}
-
}
-
}
あなたが使用している場合方法2)、で、オペレータを指定することによって達成することができます。
-
POST /movies/_search
-
{
-
"query": {
-
"match": {
-
"title": {
-
"query":
"last christmas",
-
"operator":
"and"
-
}
-
-
}
-
}
6つのフレーズ検索
フレーズ検索を使用します。すなわち:phrase query
。フレーズデフォルト間の隙間が、中間の傾きを表すために使用することができる何= 1ターム(ワード)離間しなくてもよいです
-
POST /movies/_search
-
{
-
"query": {
-
"match_phrase": {
-
"title":{
-
"query":
"one love",
-
"slop":
1
-
}
-
}
-
}
-
}
二クエリ文字列&&単純なクエリ文字列
1 Elasticsearchまた、クエリ文字列と、単純なクエリ文字列をサポートしています。のは、クエリ文字列を見てみましょう、このように、パケット、マルチフィールドをサポートしています。
まず、2つのテストデータの挿入
-
PUT /users/_doc/
1
-
{
-
"name":
"Ruan Yiming",
-
"about":
"java, golang, node, swift, elasticsearch"
-
}
-
-
PUT /users/_doc/
2
-
{
-
"name":
"Li Yiming",
-
"about":
"Hadoop"
-
}
テスト:
-
POST /users/_search
-
{
-
"query": {
-
"query_string": {
-
"default_field":
"name",
-
"query":
"Ruan AND Yiming"
-
}
-
}
-
}
-
-
# 多字段 使用 fields
-
POST /users/_search
-
{
-
"query": {
-
"query_string": {
-
"fields": [
"name",
"about"],
-
"query":
"(Ruan AND Yiming) OR (Java AND Elasticsearch)"
-
}
-
}
-
}
-
クエリ文字列に似ていますが、次のような違いを持つ単純なクエリ文字列、:
- 文法エラーは無視され、唯一のクエリ構文の一部をサポートしています
- サポートされていない
AND
、、OR
、NOT
用語が表示された場合、文字列として扱われます - デフォルトの間の長期的な関係
OR
、あなたはdefault_operatorを指定することができます - ロジックの一部をサポートし、
+
代わりにAND
、|
代わりにOR
、-
代わりにNOT
-
POST users/_search
-
{
-
"query": {
-
"simple_query_string": {
-
"query":
"Zhang Fubing",
-
"fields": [
"name"],
-
"default_operator":
"AND"
-
}
-
}
-
}