ElasticSearch 学習ノート - 第 2 章 環境設定と HTTP 手順

2. 環境設定とHTTPコマンド

2.1 環境設定

公式サイトアドレス

私が勉強していたときは、解凍して使える Windows バージョン 7.8.0 の解凍版を使用していました。

目次 意味
置き場 実行可能スクリプトのディレクトリ
構成 設定ディレクトリ
jk 組み込みの JDK ディレクトリ
ライブラリ クラスライブラリ
ログ ログディレクトリ
モジュール モジュールディレクトリ
プラグイン プラグインディレクトリ

起動ファイルは /bin/elasticsearch.bat なので、ファイルをダブルクリックしてサービスを起動します。

ブラウザを開き、アドレス http://localhost:9200 を入力し、起動が成功するかどうかをテストします。

ここに画像の説明を挿入します

ES HTTP アクセスのデフォルトのポートは 9200 です

ES7.8.0 では、JDK1.8 以降を使用する必要があります。

2.2 転置インデックス

2.2.1 ESのデータ構造

ES では、データの一部がドキュメントであり、ドキュメント指向のデータベースです。

ES がデータをどのように保存するかを理解するために、MySQL に例えることができます。

ここに画像の説明を挿入します

ES の Index はライブラリ、Types はテーブル、Documents はテーブルの行に相当します。

: ここでのタイプの概念は徐々に弱まっています。Elasticsearch 6.X では、インデックスに含めることができるのは 1 つだけです。

type、Elasticsearch 7.X では、Type の概念が削除されました。

ES では、保存されるデータはJson 形式です

{
    
    
    "name":"张三",
    "age":18,
    "tel":13111111111
}

2.2.2 転置インデックスとは何ですか?

ES では、ドキュメントの内容を迅速かつ正確にクエリするために、特別な概念である転置インデックスを使用します。

もちろん、対応するのは私たちがよく使うフォワードインデックスです。

次に、例を使用して転置インデックスとは何かを理解します。次の 2 つのデータセットがあると仮定します。

{
    
    
    "id":1001,
    "content":"This is a test case"
}
{
    
    
    "id":1002,
    "content":"This is a case"
}

フォワードインデックスを使用する場合、次のようにデータを保存します。

ID コンテンツ
1001 これはテストケースです
1002 これはケースです

このとき、id が主キーとして使用され、主キーインデックスが確立されるため、id に基づいて対応する番号のデータをすぐに見つけることができます。その場合、大文字と小文字を含むデータをクエリする必要がある場合、インデックスが利用できないため、効率が低下します。

したがって、逆索引を使用してクエリを最適化し、キーワードを ID に関連付けることができます。

キーワード ID
場合 1001,1002
これ 1001,1002
テスト 1001

このとき、事例データを含むデータを検索する必要がある場合、まずキーワードインデックスを通じて事例データを含むidを見つけ、次にid関連付けを通じて対応するコンテンツを見つけることができます。

上記の説明から、いわゆる順方向インデックスはキーに基づいて値を見つけ、逆インデックスは値に基づいてキーを見つけることが実際にわかります。

2.3 HTTPコマンド

前の章の紹介により、ES が RESTful 全文検索エンジンであることがわかったので、HTTP 命令を通じて ES を直接操作できます。

2.3.1 インデックス

2.3.1.1 インデックスの作成

次のPUTリクエストをES サービスの 9200 ポートに送信します: http://localhost:9200/index name でインデックスを作成します。

ここに画像の説明を挿入します

戻り値のコメント:

{
    
    
    "acknowledged": true, // 响应结果
    "shards_acknowledged": true, // 分片结果
    "index": "test" // 索引名称
}

注: インデックス ライブラリを作成するためのデフォルトのシャード数は 1 です。7.0.0 より前の Elasticsearch バージョンでは、デフォルトは 5 シャードです。同じ名前のインデックスを繰り返し作成することはできません。それ以外の場合は、エラーが報告されます。エラーは次のとおりです。続く

ここに画像の説明を挿入します

2.3.1.2 インデックスの表示
  • すべてのインデックスを表示

    現在の ES サービスのすべてのインデックスを表示するには、次のGETリクエストを ES サービスの 9200 ポートに送信します: http://localhost:9200/_cat/indices?v。

ここに画像の説明を挿入します

戻り値のフィールドについては、次の表で説明します。

分野 意味
健康 現在のサーバーの健全性ステータス:(クラスターは完了)(単一ポイントは正常、クラスターは不完全) 赤 (単一ポイントは異常)
状態 インデックスのオープンまたはクローズのステータス
索引 インデックス名
uuid インデックス番号
プライマリシャードの数
担当者 部数
docs.count 利用可能な文書の数
ドキュメント.削除されました 削除された状態の文書 (トゥームストーン)
店舗サイズ プライマリ シャードとセカンダリ シャードが占める全体のスペース
pri.store.サイズ プライマリシャードが占めるスペース
  • 指定されたインデックスを表示する

    指定されたインデックスを表示するには、次のGETリクエストを ES サービスの 9200 ポートに送信します: http://localhost:9200/index name。

ここに画像の説明を挿入します

戻り値のコメント:

{
    
    
    "test": {
    
     // 索引名
        "aliases": {
    
    }, // 别名
        "mappings": {
    
    }, // 映射
        "settings": {
    
     // 设置
            "index": {
    
      // 设置-索引
                "creation_date": "1678625395428", // 设置-索引-创建时间
                "number_of_shards": "1",  // 设置-索引-主分片数量
                "number_of_replicas": "1", // 设置-索引-副分片数量
                "uuid": "lKhZuv6ISHqnSfRCheVg1A", // 设置-索引-唯一标识
                "version": {
    
     // 设置-索引-版本
                    "created": "7080099"
                },
                "provided_name": "test" // 设置-索引-名称
            }
        }
    }
}
2.3.1.3 インデックスの削除

次のDELETEリクエストをES サービスの 9200 ポートに送信します: http://localhost:9200/index name で、指定されたインデックスを削除します。

ここに画像の説明を挿入します

2.3.2 ドキュメント

2.3.2.1 ドキュメントの作成

上記の学習を通じて、ES 内のドキュメントはリレーショナル データベースのテーブル データと比較できること、および ES に保存されているドキュメントは JSON 形式であることがわかりました。したがって、ドキュメントをインデックスに追加するときは、JSON 形式のデータも追加する必要があります。

  • 主キーが指定されていません

    ES サービスの 9200 ポートにPOSTリクエスト http/localhost:9200/index name/_docを送信し、リクエスト本文に次のデータを追加します。

    {
          
          
     "title":"iPhone 14 pro 256G 玫瑰金",
     "category":"苹果",
     "price":10999.00
    }
    

ここに画像の説明を挿入します

戻り値のコメント:

{
    
    
    "_index": "test", // 索引名
    "_type": "_doc",  // 类型-文档
    "_id": "aoP21YYBkGp7UZAjbSvt", // 唯一标识,由于添加时没有指定,因此ES会随机生成
    "_version": 1,   // 版本
    "result": "created", // 结果,created表示创建成功
    "_shards": {
    
      // 分片
        "total": 2, // 分片-总数
        "successful": 1, // 分片-成功
        "failed": 0  // 分片-失败
    },
    "_seq_no": 0,
    "_primary_term": 1
}
  • 主キーを指定する

    次のPUTリクエストを ES サービスの 9200 ポートに送信します: http/localhost:9200/index name/_doc/primary keynumber をリクエスト本文に追加します。

    {
          
          
     "title":"iPhone 14 pro 256G 暗夜紫",
     "category":"苹果",
     "price":10999.00
    }
    

ここに画像の説明を挿入します

このとき、主キーidの値は指定した1001です。

2.3.2.2 ドキュメントを表示する

指定された ID を持つドキュメントを表示するには、ES サービスの 9200 ポートにGETリクエスト http/localhost:9200/index name/_doc/primary keynumber を送信します

ここに画像の説明を挿入します

戻り値のコメント:

{
    
    
    "_index": "test", // 索引名称
    "_type": "_doc",  // 类型-文档
    "_id": "1001",    // 主键号
    "_version": 1,    // 版本
    "_seq_no": 13,    
    "_primary_term": 1,
    "found": true,    // 查询结果,true为已找到,false为未找到
    "_source": {
    
          // 文档源信息
        "title": "iPhone 14 pro 256G 暗夜紫",
        "category": "苹果",
        "price": 10999.00
    }
}
2.3.2.3 ドキュメントの変更

文書の修正は全面修正と部分修正に分けられます。

  • 完全な修正

    いわゆる完全な変更とは、元のデータ (構造を含む) が新しいデータで上書きされることを意味します。

    完全変更のリクエストは、ドキュメントを作成して主キーを指定するリクエストのパスと同じです。

    次のPOSTリクエストを ES サービスの 9200 ポートに送信します: http/localhost:9200/index name/_doc/primary keynumber をリクエスト本文に追加します。

    {
          
          
     "title":"iPhone 14",
     "category":"苹果",
     "price":6999.00
    }
    

ここに画像の説明を挿入します

戻り値の結果が更新されていれば修正成功となり、バージョン番号が2に変わることに注意してください。

  • ローカルな変更

    いわゆる部分変更とは、元の文書の特定のフィールドの値のみを変更することを意味します。

    次のPOSTリクエストを ES サービスの 9200 ポートに送信します: http/localhost:9200/インデックス名/_update/主キー番号、リクエスト本文に次のデータを追加します。

    {
          
          
        "doc":{
          
          
            "title":"iPhone 14 pro 256G 暗夜紫",
            "price":10999
        }
    }
    

ここに画像の説明を挿入します

戻り値の結果が更新されていれば変更が成功したことを意味しており、バージョン番号が 3 に変わっていることに注意してください。

2.3.2.4 文書の削除
  • 主キー番号に基づいて文書を削除する

    次のDELETEリクエストを ES サービスの 9200 ポートに送信します: http/localhost:9200/index name/_doc/primary keynumber 指定された ID を持つドキュメントを削除します。

    ここに画像の説明を挿入します

    戻り値の結果が削除された場合は、削除が成功したことを意味します。ここでのバージョン番号は 4 に変わります。これは、ドキュメントを削除してもディスクからすぐに削除されず、削除済みとしてマークされるだけであることを意味します。 (論理的な削除)。

  • 指定された基準に基づいてドキュメントを削除します

    ES サービスの 9200 ポートにPOSTリクエスト http/localhost:9200/index name/_delete_by_queryを送信し、リクエスト本文に次の内容を追加します。

    {
          
          
        "query":{
          
          
            "match":{
          
          
                "price":6999.00
            }
        }
    }
    

    上記の条件は、価格フィールド値 6999.00 を満たすドキュメントが削除されることを意味します。上記の条件付き形式については、以下の高度なクエリの章で説明します。

ここに画像の説明を挿入します

戻り値のコメント:

{
    
    
    "took": 228,  // 本次操作耗时,单位为ms
    "timed_out": false,  // 是否超时
    "total": 4,          // 总数
    "deleted": 4,        // 删除的数量
    "batches": 1,
    "version_conflicts": 0,
    "noops": 0,
    "retries": {
    
    
        "bulk": 0,
        "search": 0
    },
    "throttled_millis": 0,
    "requests_per_second": -1.0,
    "throttled_until_millis": 0,
    "failures": []
}

2.3.3 マッピング

ES におけるマッピングの役割は、MySQL におけるテーブル構造に相当します。

データベースのテーブル構造と同様に、データベース テーブルを作成するには、フィールド名、タイプ、長さ、制約などを設定する必要があります。インデックスについても同様です。どのフィールドがこのタイプに属し、各フィールドにどのような制約情報があるかを知る必要があります。 . これをマッピングと呼びます。

2.3.3.1 マッピングの作成

ES サービスの 9200 ポートにPUTリクエスト http/localhost:9200/index name/_mappingを送信し、リクエスト本文に次の内容を追加します。

{
    
    
    "properties":{
    
    
        "name":{
    
    
            // 类型为text,会分词
            "type":"text",
            // 该字段是否可以被索引
            "index":true
        },
        "sex":{
    
    
            // 类型为keyword,不会分词
            "type":"keyword",
            "index":true
        },
        "tel":{
    
    
            "type":"keyword",
            "index":false
        },
        "age":{
    
    
            // 类型为数值类型
            "type":"integer"
        }
    }
}

ここに画像の説明を挿入します

マッピングデータの説明:

  • フィールド名: 任意に入力し、タイトル、サブタイトル、画像、価格などの多くの属性を以下に指定します

  • type: type、Elasticsearch でサポートされるデータ型は非常に豊富です。以下にいくつかのキー タイプを示します。

    • 文字列型で、テキスト(分離可能な単語)とキーワード(分離不可能な単語)の2種類に分かれます。

      テキスト型のフィールドは、指定されたアナライザーに従って ES によってセグメント化されます。

      キーワード タイプのフィールドは ES によってセグメント化されません

    • 数値タイプは2つに分類されます

      • 基本データ型:long、integer、short、byte、double、float、half_float
      • 浮動小数点数の高精度型:scaled_float
    • 日付: 日付タイプ

    • 配列: 配列型

    • オブジェクト: オブジェクト

  • Index: インデックスを付けるかどうか。デフォルトは true です。設定が行われていない場合、すべてのフィールドにインデックスが付けられます。

    • true: フィールドにはインデックスが付けられ、検索に使用できます。
    • false: フィールドにはインデックスが付けられず、検索できません。
  • store: データを独立して保存するかどうか。デフォルトは false です。

    • 元のテキストは _source に保存されます。デフォルトでは、他の抽出フィールドは独立して保存されません。

      はい、_source から抽出されます。もちろん、設定している限り、フィールドを独立して保存することもできます。

      "store": true で十分です。独立して保存されたフィールドを取得することは、_source から解析するよりもはるかに高速ですが、時間もかかります

      より多くのスペースがあるため、実際のビジネス ニーズに応じて設定する必要があります。

  • Analyzer: アナライザーを指定します。アナライザーについては、後で別の章を設けて説明します。

2.3.3.2 ビューマッピング

ES サービスの 9200 ポートにGETリクエストhttp/localhost:9200/index name/_mapping を送信して、マッピングをクエリします。

ここに画像の説明を挿入します

2.3.4 高度なクエリ

Elasticsearch は、クエリを定義するための JSON に基づいた完全なクエリ DSL を提供します。

まず、次のデータをテスト インデックスに追加しましょう

{
    
    
 "name":"ZhangSan",
 "sex":"man",
 "tel":"13111111111",
 "age":22
}
{
    
    
 "name":"ZhangSan1",
 "sex":"woman",
 "tel":"13111111111",
 "age":24
}
{
    
    
 "name":"ZhangSan2",
 "sex":"woman",
 "tel":"13111111111",
 "age":24
}
{
    
    
 "name":"LiSi",
 "sex":"man",
 "tel":"13111111115",
 "age":22
}
{
    
    
 "name":"WangWu",
 "sex":"woman",
 "tel":"13111111114",
 "age":23
}
{
    
    
 "name":"ZhaoLiu",
 "sex":"woman",
 "tel":"13111111112",
 "age":24
}
2.3.4.1 すべてのドキュメントをクエリする

次のGETリクエストをES サービスの 9200 ポートに送信します: http/localhost:9200/index name/_search し、リクエスト本文に次の内容を追加します。

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

「query」はクエリ オブジェクトを表し、さまざまなクエリ属性を持つことができます。

「match_all」は、クエリのタイプを示します。たとえば、match_all (すべてをクエリすることを示します)、および次のセクションで説明する match、term、range、およびその他のタイプを示します。

"match_all": {}、その後に続く {} はクエリ条件です。ここではすべてをクエリしているため、追加のクエリ条件は必要ありません。

ここに画像の説明を挿入します

情報コメントを返す:

{
    
    
    "took": 0,   // 查询花费时间,单位毫秒
    "timed_out": false,  // 是否超时
    "_shards": {
    
          // 分片信息
        "total": 1,   // 分片总数
        "successful": 1,  // 成功
        "skipped": 0,     // 忽略
        "failed": 0       // 失败
    },  
    "hits": {
    
             // 搜索命中结果
        "total": {
    
        // 搜索条件匹配的文档总数
            "value": 6,   // 总命中计数的值
            "relation": "eq" // 计数规则,eq 表示计数准确, gte 表示计数不准确
        },
        "max_score": 1.0,   // 匹配度分值
        "hits": [          // 命中结果集合
            {
    
    
                "_index": "test",   // 索引名
                "_type": "_doc",    // 类型是文档
                "_id": "WeMF24YBubtchCWfjp6V",  // 唯一标识
                "_score": 1.0,      // 该条记录匹配得分
                "_source": {
    
            // 记录数据源
                    "name": "ZhangSan", 
                    "sex": "man",
                    "tel": "13111111111",
                    "age": 22
                }
            },
            ...
        ]
    }
}
2.3.4.2 照合クエリ

一致一致型クエリはクエリ条件を単語に分割してクエリを実行し、複数のエントリ間に OR の関係があります。

次のGETリクエストをES サービスの 9200 ポートに送信します: http/localhost:9200/index name/_search し、リクエスト本文に次の内容を追加します。

{
    
    
    "query":{
    
    
        "match":{
    
    
            "name":"zhangsan"
        }
    }
}

上記のクエリ条件は、クエリ名フィールドに zhangsan に関するデータが含まれていることを示しています。

ここに画像の説明を挿入します

ご覧のとおり、返された結果では 1 つのデータのみが一致します。

2.3.4.3 複数フィールドの照合クエリ

multi_match は match に似ていますが、複数のフィールドでクエリを実行できる点が異なります。

次のGETリクエストをES サービスの 9200 ポートに送信します: http/localhost:9200/index name/_search し、リクエスト本文に次の内容を追加します。

{
    
    
    "query":{
    
    
        "multi_match":{
    
    
            "query":"woman",
            "fields":["name","sex"]
        }
    }
}

上記のクエリ条件は、クエリの名前フィールドまたは性別フィールドに女性データが含まれていることを示しています。

ここに画像の説明を挿入します

2.3.4.4 キーワードの正確なクエリ

用語クエリ、正確なキーワード一致クエリ、クエリ条件の単語分割なし

次のGETリクエストをES サービスの 9200 ポートに送信します: http/localhost:9200/index name/_search し、リクエスト本文に次の内容を追加します。

{
    
    
    "query":{
    
    
        "term":{
    
    
            "age":22
        }
    }
}
或者
{
    
    
    "query":{
    
    
        "term":{
    
    
            "age":{
    
    
                "value":22
            }
        }
    }
}

上記のクエリ条件は、age フィールドの値が 22 であるデータをクエリすることを示しています。

ここに画像の説明を挿入します

2.3.4.5 複数のキーワードの完全一致

用語クエリは用語クエリと同じですが、照合のために複数の値を指定できます。このフィールドに指定された値のいずれかが含まれている場合、このドキュメントは条件を満たします。これは、MySQL の in キーワードに相当します。

次のGETリクエストをES サービスの 9200 ポートに送信します: http/localhost:9200/index name/_search し、リクエスト本文に次の内容を追加します。

{
    
    
    "query":{
    
    
        "terms":{
    
    
            "age":[22,23]
        }
    }
}

上記のクエリ条件は、年齢フィールドの値が 22 または 23 であるデータに対するクエリであることを示しています。

ここに画像の説明を挿入します

2.3.4.6 結合クエリ

ES では、boolキーワードが使用され、mustmust_not、およびshouldキーワードと組み合わせて、複数のクエリを結合して、より複雑なクエリ条件を形成します。

Must は同時に満たされなければならないことを意味し、AND と同等です。

must_not は同時に満たしてはいけないことを意味し、NOT と同等です。

should は「すべきである」という意味で、OR と同等です

  • 必ず例を示します

    次のGETリクエストをES サービスの 9200 ポートに送信します: http/localhost:9200/index name/_search し、リクエスト本文に次の内容を追加します。

    {
          
          
        "query":{
          
          
            // 条件
            "bool":{
          
          
                // 多个条件必须同时成立,即 AND
                "must":[
                    {
          
          
                        "match":{
          
          
                            "name":"ZhangSan"
                        }
                    },
                    {
          
          
                        "match":{
          
          
                            "age":22
                        }
                    }
                ]
            }
        }
    }
    

    上記のクエリ条件は、クエリ名フィールドに ZhangSan が含まれ、年齢フィールドが 22 であることを示しています。

ここに画像の説明を挿入します

  • してはいけない例

    次のGETリクエストをES サービスの 9200 ポートに送信します: http/localhost:9200/index name/_search し、リクエスト本文に次の内容を追加します。

    {
          
          
        "query":{
          
          
            // 条件
            "bool":{
          
          
                // 多个条件必须同时不成立,即 NOT
                "must_not":[
                    {
          
          
                        "match":{
          
          
                            "age":"22"
                        }
                    },
                    {
          
          
                        "match":{
          
          
                            "age":"24"
                        }
                    }
                ]
            }
        }
    }
    

    上記のクエリ条件は、年齢フィールドが 24 歳でも 22 歳でもないデータをクエリすることを示しています。

  • 例をあげるべきです

    次のGETリクエストをES サービスの 9200 ポートに送信します: http/localhost:9200/index name/_search し、リクエスト本文に次の内容を追加します。

    {
          
          
        "query":{
          
          
            // 条件
            "bool":{
          
          
                // 多个条件其中有一个成立即可,即 OR
                "should":[
                    {
          
          
                        "match":{
          
          
                            "age":"22"
                        }
                    },
                    {
          
          
                        "match":{
          
          
                            "age":"24"
                        }
                    }
                ]
            }
        }
    }
    

    上記のクエリ条件は、クエリ年齢フィールドが 24 または 22 データであることを示しています。

ここに画像の説明を挿入します

2.3.4.7 範囲クエリ

範囲クエリ。指定された範囲内にある数値または時間を検索するクエリです。

range キーワードは次の文字とともに使用されます。

キャラクター 説明する
GT より大きい (>)
ジーテ 以上 (>=)
それ 未満 (<)
LTE 以下 (<=)

次のGETリクエストをES サービスの 9200 ポートに送信します: http/localhost:9200/index name/_search し、リクエスト本文に次の内容を追加します。

{
    
    
    "query":{
    
    
        "range":{
    
    
            "age":{
    
    
                "gt":22,
                "lt":24
            }
        }
    }
}

上記のクエリ条件は、クエリ年齢フィールドの値が 22 より大きく、24 データより小さいことを示しています。

ここに画像の説明を挿入します

2.3.4.8 指定されたフィールドのクエリ

デフォルトでは、ES クエリ結果では、ヒット データは _source に配置され、ユーザーに返されます。

クエリパラメータでクエリしたいフィールドとクエリしたくないフィールドを指定できます。

次のGETリクエストをES サービスの 9200 ポートに送信します: http/localhost:9200/index name/_search し、リクエスト本文に次の内容を追加します。

{
    
    
    "_source":["name","age"],
    "query":{
    
    
        "match":{
    
    
           "name":"ZhangSan"
        }
    }
}

上記のクエリ条件は、クエリ名フィールドに ZhangSan のデータが含まれており、返されるデータには名前フィールドと年齢フィールドのみが含まれていることを示しています。

ここに画像の説明を挿入します

「_source」でクエリしたいフィールドを単純に指定するだけでなく、include と excludes を使用して、クエリしたいフィールドとクエリしたくないフィールドをそれぞれ指定することもできます。

上記の例は、次のクエリと同等です。

{
    
    
     "_source":{
    
    
        "includes":["name","age"],
        "excludes":["sex","tel"]
    },
    "query":{
    
    
        "match":{
    
    
           "name":"ZhangSan"
        }
    }
}或者
{
    
    
     "_source":{
    
    
        "excludes":["sex","tel"]
    },
    "query":{
    
    
        "match":{
    
    
           "name":"ZhangSan"
        }
    }
}

ここに画像の説明を挿入します

2.3.4.9 ソートクエリ

sort キーワードを使用するとさまざまなフィールドで並べ替えることができ、order キーワードは並べ替え方法を指定します。desc降順、asc

昇順。

次のGETリクエストをES サービスの 9200 ポートに送信します: http/localhost:9200/index name/_search し、リクエスト本文に次の内容を追加します。

{
    
    
    // 指定查询字段,方便观察结果
    "_source":["age"],
    "query":{
    
    
        // 表示查询全部数据
        "match_all":{
    
    
        }
    },
    // 设置排序规则
    "sort":{
    
    
        // 排序的字段
        "age":{
    
    
            // 正序or倒序
            "order":"desc"
        }
    }
}

上記のクエリは、クエリが年齢フィールドに従って逆順に並べ替えられていることを示しています。

ここに画像の説明を挿入します

ES では、複数フィールドの並べ替えクエリがサポートされており、特定のフィールドに基づく降順と特定のフィールドに基づく昇順のニーズを満たすことができます。

次のGETリクエストをES サービスの 9200 ポートに送信します: http/localhost:9200/index name/_search し、リクエスト本文に次の内容を追加します。

{
    
    
    // 指定查询字段,方便观察结果
    "_source":["age"],
    "query":{
    
    
        // 表示查询全部数据
        "match_all":{
    
    
        }
    },
    // 设置排序规则
    "sort":{
    
    
        // 排序的字段
        "age":{
    
    
            // 正序or倒序
            "order":"desc"
        },
        "_score":{
    
    
            "order":"asc"
        }
    }
}

上記のクエリ条件は、データが年齢フィールドの値に従って降順に並べ替えられ、次に関連性スコアに従って昇順に並べ替えられることを示しています。

ここに画像の説明を挿入します

2.3.4.10 ページングクエリ

ES では、from キーワードと size キーワードを使用してページング クエリを完了します。

from は現在のページの開始インデックスを表し、デフォルトでは 0 から始まります。計算式は (現在のページ番号 - 1) * ページ サイズです。

size はページ サイズ、つまり各ページに表示されるデータの数を表します。

次のGETリクエストをES サービスの 9200 ポートに送信します: http/localhost:9200/index name/_search し、リクエスト本文に次の内容を追加します。

{
    
    
    "query":{
    
    
        // 表示查询全部数据
        "match_all":{
    
    
        }
    },
    // 从第几条数据开始,下标以0开始,计算公式:(页码 - 1) * 页大小,例如查第二页,则是(2 - 1) * 2 = 2
    "from":0,
    // 页大小
    "size":2
}

ここに画像の説明を挿入します

2.3.4.11 集計クエリ

ES では、キーワード aggs を term、max、avg などの集計キーワードと組み合わせて使用​​し、ドキュメントの統計分析を実行できます。

用語は、MySQL の group by と同様に、グループ統計を表します。ここでの用語は集計で使用されており、クエリ キーワードという用語とは区別する必要があることに注意してください。

max は最大値を見つけることを意味します

avgは平均という意味です

sumは合計という意味です

カーディナリティとは、重複を削除した後の合計数を見つけることを意味します

統計は、一度に 5 つのインジケーターの数、最大、最小、平均、および合計を返します。

次のGETリクエストをES サービスの 9200 ポートに送信します: http/localhost:9200/index name/_search し、リクエスト本文に次の内容を追加します。

{
    
    
    // 聚合操作
   "aggs":{
    
    
       // 统计结果的名称
       "age_group":{
    
    
            // 分组
            "terms":{
    
    
                // 分组字段
                "field":"age"
            }
       },
       // 统计结果的名称
       "age_avg":{
    
    
            // 平均值
            "avg":{
    
    
                // 取平均值字段
                "field":"age"
            }
       },
       "age_max":{
    
    
           // 最大值
           "max":{
    
    
               "field":"age"
           }
       },
       "age_min":{
    
    
           // 最小值
           "min":{
    
    
               "field":"age"
           }
       },
       "age_sum":{
    
    
           // 求和
           "sum":{
    
    
               "field":"age"
           }
       },
       "age_distinct":{
    
    
           // 去重后求总数
           "cardinality":{
    
    
               "field":"age"
           }
       },
       "age_stats":{
    
    
           // stats 聚合,对某个字段一次性返回 count,max,min,avg 和 sum 五个指标
           "stats":{
    
    
               "field":"age"
           }
       }
   }
}

ここに画像の説明を挿入します

2.3.4.12 ハイライトクエリ

Elasticsearchではクエリ内容のキーワード部分にラベルやスタイル(強調表示)を設定することができます。

スタイルは開発者がカスタマイズ可能

マッチクエリを使用し、ハイライト属性を追加するとハイライトクエリが実現できます。

  • pre_tags : 事前タグ
  • post_tags : 投稿タグ
  • フィールド: 強調表示する必要があるフィールド
  • title : タイトル フィールドを強調表示する必要があることがここに示されています。後でこのフィールドに独自の構成を設定することも、空にすることもできます。

次のGETリクエストをES サービスの 9200 ポートに送信します: http/localhost:9200/index name/_search し、リクエスト本文に次の内容を追加します。

{
    
    
    "query":{
    
    
        "match":{
    
    
            "name":"ZhangSan"
        }
    },
    "highlight":{
    
    
        "pre_tags":"<font color='red'>",
        "post_tags":"</font>",
        "fields":{
    
    
            "name":{
    
    }
        }
    }
}

上記のクエリ条件は、クエリ名フィールドに ZhangSan が含まれており、戻り値のキーワードが赤色で表示されていることを示しています。

ここに画像の説明を挿入します
参考

[シリコンバレー] ElasticSearch の入門から習得までのチュートリアル (ELK テクノロジー スタック elasticsearch 7.x+8.x の新機能に基づく)

おすすめ

転載: blog.csdn.net/weixin_42584100/article/details/129653519