ElasticSearch6.X操作ガイド(一)
15741 ワード
0.入門
簡単なインストール
対応するバージョンのパッケージをダウンロードした後
cd elasticsearch-
./bin/elasticticsearch
-d
を後で追加できます.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
}
ドキュメントの取得
一般検索
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" : {}
}
}
}'
ドキュメントの更新
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" }
}
}
}
}
}'