ElasticSearch6.X操作ガイド(一)


0.入門


簡単なインストール


対応するバージョンのパッケージをダウンロードした後
cd elasticsearch-
./bin/elasticticsearch
  • Elasticsearchをデーモンとしてバックグラウンドで実行したい場合は、パラメータ-dを後で追加できます.
  • WindowsでElasticseachを実行している場合はbinelasticsearchを実行する必要があります.batはbinelasticsearchではありません.
  • Elasticsearchが正常に起動したかどうかをテストするには、別の端末を開き、
  • を実行します.
    curl 'http://localhost:9200/?pretty'
    

    またはブラウザで開く
    http://localhost:9200/?pretty
    

    結果は次のとおりです.
    {
      "name" : "9333T0D",
      "cluster_name" : "elasticsearch",
      "cluster_uuid" : "zHPKwfphSmqah0eNiRiH1Q",
      "version" : {
        "number" : "6.2.2",
        "build_hash" : "10b1edd",
        "build_date" : "2018-02-16T19:01:30.685723Z",
        "build_snapshot" : false,
        "lucene_version" : "7.2.1",
        "minimum_wire_compatibility_version" : "5.6.0",
        "minimum_index_compatibility_version" : "5.0.0"
      },
      "tagline" : "You Know, for Search"
    }
    

    1.索引


    オブジェクトの説明


    インデックス(データベース)→タイプ(テーブル)→ドキュメント(行)→プロパティ(フィールド)

    インデックスの作成

    curl -XPUT 'localhost:9200/megacorp?pretty'
    

    または
    curl -XPUT -H 'Content-Type: application/json' 'localhost:9200/megacorp?pretty'(5.5 )
    

    メッセージを返す
    {
      "acknowledged" : true,
      "shards_acknowledged" : true
    }
    

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

    API:_cat
    curl -XGET -H 'Content-Type: application/json' 'localhost:9200/_cat/indices?v'
    

    メッセージを返す
    health
    status
    index
    uuid
    pri
    rep
    docs.count
    docs.deleted
    store.size
    pri.store.size
    yellow
    open
    customer
    SRKYMKC1SVSTfCOSAbGqzQ
    5
    1
    6
    0
    20.3kb
    20.3kb
    v:列ヘッダーの表示

    索引の削除

    curl -XDELETE 'localhost:9200/megacorp?pretty'
    

    メッセージを返す
    {
      "acknowledged" : true
    }
    

    2.タイプとドキュメント


    ドキュメントの作成

    curl -XPUT -H 'Content-Type: application/json' 'localhost:9200/megacorp/employee/1' -d '
    {
        "first_name" : "John",
        "last_name" :  "Smith",
        "age" :        25,
        "about" :      "I love to go rock climbing",
        "interests": [ "sports", "music" ]
    }'
    
    curl -XPUT -H 'Content-Type: application/json' 'localhost:9200/megacorp/employee/2' -d '
    {
        "first_name" :  "Jane",
        "last_name" :   "Smith",
        "age" :         32,
        "about" :       "I like to collect rock albums",
        "interests":  [ "music" ]
    }'
    
    curl -XPUT -H 'Content-Type: application/json' 'localhost:9200/megacorp/employee/3' -d '
    {
        "first_name" :  "Douglas",
        "last_name" :   "Fir",
        "age" :         35,
        "about":        "I like to build cabinets",
        "interests":  [ "forestry" ]
    }'
    

    ドキュメントを明示的に作成

    curl -XPUT  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/employee/4?op_type=create'  -d '
    {
        "first_name" :  "Jack",
        "last_name" :   "Kobe",
        "age" :         44,
        "about":        "I like to play basketball",
        "interests":  [ "sport" ]
    }'
    

    または
    curl -XPUT  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/employee/4/_create'  -d '
    {
        "first_name" :  "Jack",
        "last_name" :   "Kobe",
        "age" :         44,
        "about":        "I like to play basketball",
        "interests":  [ "sport" ]
    }'
    

    作成成功ステータスコードは201で、既存のステータスコードは409です.
    インデックスデータ後の戻り情報
    {
      "_index" : "customer",
      "_type" : "external",
      "_id" : "1",
      "_version" : 1,
      "result" : "created",
      "_shards" : {
        "total" : 2,
        "successful" : 1,
        "failed" : 0
      },
      "_seq_no":0
      "_primary_term":1
    }
    
  • ドキュメント作成時:index 、 _typeと_idの組合せは、1つのドキュメントを一意に識別することができる.
  • ドキュメントのメタデータの説明_index:ドキュメントの保存先type:ドキュメントが表すオブジェクトカテゴリ_id:ドキュメント固有ID_version:バージョン番号;ドキュメントを変更するたびに(削除を含む),バージョンの値は増加します.競合の処理にも使用されます.IDの自動生成:要求の構造は、PUT述語(「このURLを使用してこのドキュメントを格納する」)ではなく、POST述語(「このURLネーミングスペースにドキュメントを格納する」)を使用するように調整されています.

  • ドキュメントの取得


    一般検索
    curl -XGET  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/employee/1'
    

    軽量検索
    curl -XGET  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/employee/_search'
    

    コンテンツの一部を取得
    curl -XGET  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/employee/1?_source=first_name,last_name'
    

    ソースの内容しか入手できません
    curl -XGET  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/employee/1?_source'
    

    条件による検索
    curl -XGET  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/employee/_search?q=last_name:Smith'
    

    *q=すべての文書に一致することを示す
    sort=ageはage情報に従って並べ替えることを示す
    ascは昇順を表す
    パラメータなしですべてのドキュメントをクエリーできます
    curl -XGET 'localhost:9200/megacorp/_search?pretty'
    

    メッセージの説明に戻る
    {
      "took" : 5,
      "timed_out" : false,
      "_shards" : {
        "total" : 5,
        "successful" : 5,
        "failed" : 0
      },
      "hits" : {
        "total" : 1,
        "max_score" : null,
        "hits" : [
          {
            "_index" : "customer",
            "_type" : "external",
            "_id" : "1",
            "_score" : null,
            "_source" : {
              "name" : "Zhao1"
            },
            "sort" : [
              9223372036854775807
            ]
          }
        ]
      }
    }
    

    取得式の使用
    curl -XGET  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/employee/_search?pretty' -d '
    {
        "query" : {
            "match" : {
                "last_name" : "Smith"
            }
        }
    }'
    

    複雑な検索
    curl -XGET  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/employee/_search?pretty' -d '
    {
        "query" : {
            "bool": {
                "must": {
                    "match" : {
                        "last_name" : "smith" 
                    }
                },
                "filter": {
                    "range" : {
                        "age" : { "gt" : 30 } 
                    }
                }
            }
        }
    }'
    

    一括検索(multi-getまたはmget API)mget APIには、ドキュメントを検索する必要があるメタデータを含むdocs配列がパラメータとして必要です.index 、 _typeと_id .1つ以上の特定のフィールドを取得したい場合は、_ソースパラメータは、これらのフィールドの名前を指定します.
    curl -XGET -H 'Content-Type: application/json' 'http://localhost:9200/_mget?pretty' -d '
    {
       "docs" : [
          {
             "_index" : "megacorp",
             "_type" :  "employee",
             "_id" :    2
          },
          {
             "_index" : "megacorp",
             "_type" :  "employee",
             "_id" :    1
          }
       ]
    }'
    

    検索したいデータが同じであれば_index(同じ_typeでも)では、URLにデフォルトの/_を指定できます.indexまたはデフォルトの/index/_type .
    curl -XGET  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/_mget' -d '
    {
       "docs" : [
          { "_id" : 2 },
          { "_type" : "employee", "_id" : 1 }
       ]
    }'
    

    idsでデータを取得することもできます
    curl -XGET  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/_mget' -d '
    {
       "ids" : [ "2", "1" ]
    }'
    

    全文検索
    curl -XGET  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/employee/_search?pretty' -d '
    {
        "query" : {
            "match" : {
                "about" : "rock climbing"
            }
        }
    }
    

    フレーズ検索
     ,  “rock”   “climbing” ,    “rock climbing”  
    curl -XGET  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/employee/_search?pretty' -d '
    {
        "query" : {
            "match_phrase" : {
                "about" : "rock climbing"
            }
        }
    }'
    

    ハイライト検索
    curl -XGET  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/employee/_search?pretty' -d '
    {
        "query" : {
            "match_phrase" : {
                "about" : "rock climbing"
            }
        },
        "highlight": {
            "fields" : {
                "about" : {}
            }
        }
    }'
    
  • took:クエリが消費するミリ秒数
  • timed_out:クエリがタイムアウトしたかどうか
  • _shards:複数のスライスがクエリーされ、成功/失敗数の統計
  • hits:クエリー結果
  • hits.total:条件を満たすドキュメントの合計
  • hits.hits:検索結果を格納する実際のデータ(デフォルトでは上位10文書)
  • sort:キーワードのソート(クエリー時に作成されていない場合はscore情報がデフォルトで使用)
  • _score:

  • ドキュメントの更新

    curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/megacorp/employee/2/_update' -d '
    {
      "script" : "ctx._source.age += 5"
    }'
    
    curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/megacorp/employee/2/_update' -d '
    {
      "doc": { "first_name": "Jane Li" }
    }'
    

    変更をマージ
    curl -XPOST  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/employee/1/_update'  -d '
    {
       "script" : "ctx._source.tags+=new_tag",
       "params" : {
          "new_tag" : "search"
       }
    }'
    

    更新するデータが存在しない場合に作成
    curl -XPOST  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/employee/1/_update'  -d '
    {
       "script" : "ctx._source.views+=1",
       "upsert": {
           "views": 1
       }
    }'
    

    バージョン番号のため、同時更新に失敗した場合は再試行できます(retry_on_conflict再試行回数の設定)
    curl -XPOST  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/employee/1/_update?retry_on_conflict=5'  -d '
    {
       "script" : "ctx._source.views+=1",
       "upsert": {
           "views": 0
       }
    }'
    

    楽観的ロック問題
    curl -XGET  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/employee/2?version=5&version_type=external'
    

    ドキュメントが存在するかどうか

    curl  -i -XHEAD  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/employee/4'
    

    ドキュメントの削除

    curl -XDELETE  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/employee/4'
    

    200を返すことに成功しました.404が見つからない場合、versionは1を追加します(ドキュメントが存在しなくても(Foundはfalse),バージョン値は増加します.これはElasticsearch内部レコードの一部であり、これらの変更がマルチノード間で正しい順序で実行されることを保証するために使用されます.
    すべてのドキュメントを削除
    curl -XPOST -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/employee/_delete_by_query?conflicts=proceed' -d '
    {
      "query": {
        "match_all": {}
      }
    }'
    

    一括アクション(bulk)


    mgetと同様に、bulk APIは、単一のステップでcreate、index、update、deleteリクエストを複数回実行できます.ログ・イベントなどのデータ・ストリームをインデックスする必要がある場合は、数百ロットまたは数千ロットのキューとインデックスを作成できます.
    フォーマットの説明:このフォーマットは、改行()で接続された有効な単行JSONドキュメントストリームに似ています.注意2つのポイント:各行は必ず改行()で終わり、最後の行を含めます.これらの改行はタグとして使用され、行を有効に区切ることができます.これらのローには、解析に干渉するため、エスケープされていない改行を含めることはできません.これはこのJSONがprettyパラメータで印刷できないことを意味します.
     
    { action: { metadata }}
    { request body }
    { action: { metadata }}
    { request body }

    Action/metadata:どのドキュメントがどの操作を行うかを指定します.Action:ドキュメントが存在しない場合は、次のオプションの1つである必要があります.index:新しいドキュメントを作成するか、既存のドキュメントを置き換えます.update:ドキュメントの一部を更新します.delete「ドキュメントを削除します.metadataは、インデックス、作成、更新、または削除されたドキュメントの_index、_type、および_idを指定する必要があります.
    curl -XPOST -H 'Content-Type: application/json' 'http://localhost:9200/_mget?pretty' -d '
    { "delete": { "_index": "website", "_type": "blog", "_id": "123" }} 
    { "create": { "_index": "website", "_type": "blog", "_id": "123" }}
    { "title":    "My first blog post" }
    { "index":  { "_index": "website", "_type": "blog" }}
    { "title":    "My second blog post" }
    { "update": { "_index": "website", "_type": "blog", "_id": "123", "_retry_on_conflict" : 3} }
    { "doc" : {"title" : "My updated blog post"} }
    '
    

    deleteの後にリクエストボディは必要ありません.最後の行にも改行が必要です.各サブリクエストは独立して実行されるため、サブリクエストの失敗は他のサブリクエストの成功に影響しません.サブリクエストのいずれかが失敗した場合、最上位レベルのerrorフラグはtrueに設定され、対応するリクエストでエラーの詳細が報告されます.

    3.重合と分析


    分析:fielddataを先に開く
    curl -XPUT  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/_mapping/employee?pretty'  -d '
    {
      "properties": {
        "interests": { 
          "type":     "text",
          "fielddata": true
        }
      }
    }'
    

    解析→クエリーの実行
    curl -XGET  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/employee/_search?pretty' -d '
    {
      "aggs": {
        "all_interests": {
          "terms": { "field": "interests" }
        }
      }
    }'
    

    解析→クエリー条件の追加
    curl -XGET  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/employee/_search?pretty' -d '
    {
      "query": {
        "match": {
          "last_name": "smith"
        }
      },
      "aggs": {
        "all_interests": {
          "terms": {
            "field": "interests"
          }
        }
      }
    }'
    

    分析-階層要約
    curl -XGET  -H 'Content-Type: application/json' 'http://localhost:9200/megacorp/employee/_search?pretty' -d '
    {
        "aggs" : {
            "all_interests" : {
                "terms" : { "field" : "interests" },
                "aggs" : {
                    "avg_age" : {
                        "avg" : { "field" : "age" }
                    }
                }
            }
        }
    }'