Elasticsearch7.Xエントリー学習レッスンは検索APIの(リクエストボディ検索およびDSLプロファイル)----ノート

オリジナル: Elasticsearch7.Xエントリー学習レッスンは検索APIの(リクエストボディ検索およびDSLプロファイル)----ノート

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/qq_36697880/article/details/100654455

Elasticsearchは、私たちが豊かにサポートするために、このようにリクエストボディクエリ構文を使用しようとすることが示唆されました。

一般的な構文

     まず、簡単な例を見てみましょう。この例では、すべての文書の2つの指標(映画や404_idx)を照会します。404_idxインデックスが存在しない場合は、理論的に、Elasticsearchはエラーを返します。しかし、ignore_unavailableパラメータに、実行は、インデックスが使用できなく無視されます。


   
   
  1. # ignore_unavailable= true,可以忽略尝试访问不存在的索引“ 404_idx”导致的报错
  2. POST /movies, 404_idx/_search?ignore_unavailable= true
  3. {
  4. "profile": true,
  5. "query": {
  6. "match_all": {}
  7. }
  8. }

 1 from / sizeページネーション

    また、使用することができます  from / size ページングの組み合わせを実装します。


   
   
  1. POST /movies/_search
  2. {
  3. "from": 0,
  4. "size": 20,
  5. "query": {
  6. "match_all": {}
  7. }
  8. }

2 sortソート

     使用するsortソートを達成するために。あなたが複数のフィールドに同じ種類のSQL文のようなものが必要な場合は、複数の要素は、内部ソートに渡すことができます。


   
   
  1. POST /movies/_search
  2. {
  3. "sort": [{ "year": { "order": "desc"}},
  4. { "id.keyword": { "order": "desc"}} ],
  5. "from": 0,
  6. "size": 20,
  7. "query": {
  8. "match_all": {}
  9. }
  10. }

3 _sourceフィルタ

 あまりにも多くの結果がElasticsearchクエリ、それは実行の効率に影響を与えます。したがって、我々は、濾過_sourceの方法により、クエリフィールドを減らすことができます。

  タイトルのみ属性を表示するには、次のクエリ


   
   
  1. POST /movies/_search
  2. {
  3. "sort": [{ "year": { "order": "desc"}},
  4. { "id.keyword": { "order": "desc"}} ],
  5. "from": 0,
  6. "size": 20,
  7. "_source": [ "title"],
  8. "query": {
  9. "match_all": {}
  10. }
  11. }

4スクリプトのフィールド

  文字列の連結:Elasticsearchも、このメカニズムのような、スクリプトを介して、いくつかの簡単な操作を行うことができ、痛みのないスクリプトフィールドをサポートしています。オーダーのシナリオでは、注文はスクリプトで計算異なる為替レートを、持っている、我々は計算の結果をソートすることができます。

  


   
   
  1. POST /movies/_search
  2. {
  3. "sort": [{ "year": { "order": "desc"}},
  4. { "id.keyword": { "order": "desc"}} ],
  5. "from": 0,
  6. "size": 20,
  7. "query": {
  8. "match_all": {}
  9. }
  10. , "script_fields": {
  11. "new_title": {
  12. "script": {
  13. "lang": "painless",
  14. "source": "doc['year'].value+'hello'"
  15. }
  16. }
  17. }
  18. }

5試合の式文

 1)クエリが一致し、クエリの内容があるか、デフォルトの方法。次のように:


   
   
  1. POST /movies/_search
  2. {
  3. "query": {
  4. "match": {
  5. "title": "last christmas"
  6. }
  7. }
  8. }

 あなたが使用している場合方法2)、で、オペレータを指定することによって達成することができます。


   
   
  1. POST /movies/_search
  2. {
  3. "query": {
  4. "match": {
  5. "title": {
  6. "query": "last christmas",
  7. "operator": "and"
  8. }
  9. }
  10. }

6つのフレーズ検索 

   フレーズ検索を使用します。すなわち:phrase queryフレーズデフォルト間の隙間が、中間の傾きを表すために使用することができる何= 1ターム(ワード)離間しなくてもよいです


   
   
  1. POST /movies/_search
  2. {
  3. "query": {
  4. "match_phrase": {
  5. "title":{
  6. "query": "one love",
  7. "slop": 1
  8. }
  9. }
  10. }
  11. }

二クエリ文字列&&単純なクエリ文字列

    1 Elasticsearchまた、クエリ文字列と、単純なクエリ文字列をサポートしています。のは、クエリ文字列を見てみましょう、このように、パケット、マルチフィールドをサポートしています。

 まず、2つのテストデータの挿入


   
   
  1. PUT /users/_doc/ 1
  2. {
  3. "name": "Ruan Yiming",
  4. "about": "java, golang, node, swift, elasticsearch"
  5. }
  6. PUT /users/_doc/ 2
  7. {
  8. "name": "Li Yiming",
  9. "about": "Hadoop"
  10. }

テスト:


   
   
  1. POST /users/_search
  2. {
  3. "query": {
  4. "query_string": {
  5. "default_field": "name",
  6. "query": "Ruan AND Yiming"
  7. }
  8. }
  9. }
  10. # 多字段 使用 fields
  11. POST /users/_search
  12. {
  13. "query": {
  14. "query_string": {
  15. "fields": [ "name", "about"],
  16. "query": "(Ruan AND Yiming) OR (Java AND Elasticsearch)"
  17. }
  18. }
  19. }

クエリ文字列に似ていますが、次のような違いを持つ単純なクエリ文字列、:

  1. 文法エラーは無視され、唯一のクエリ構文の一部をサポートしています
  2. サポートされていないAND、、 ORNOT用語が表示された場合、文字列として扱われます
  3. デフォルトの間の長期的な関係OR、あなたはdefault_operatorを指定することができます
  4. ロジックの一部をサポートし、+代わりにAND|代わりにOR-代わりにNOT

   
   
  1. POST users/_search
  2. {
  3. "query": {
  4. "simple_query_string": {
  5. "query": "Zhang Fubing",
  6. "fields": [ "name"],
  7. "default_operator": "AND"
  8. }
  9. }
  10. }

おすすめ

転載: www.cnblogs.com/lonelyxmas/p/11612432.html