ElasticSearch学習ノート(一)-クエリーと集約
5983 ワード
ElasticSearchは検索エンジンであり、データベースとしても使用できます.その中のindexはリレーショナル・データベースのdatabaseに相当し、typeはリレーショナル・データベースのtableに相当する.本稿では、テストインデックスteとテストタイプuserを作成し、userに保存するデータを挿入する準備をします.jsonファイルでuser.jsonファイルの内容は以下の通りです.
上は12行でuserにコピーされていますjsonファイルの場合user.jsonファイルの末尾には必ず空白行を1行多くしなければなりません.そうしないと、6番目のデータ(ドキュメント)は挿入できません.
そしてuser.jsonが存在するフォルダの下で端末を開き、コマンドを入力
上記のコマンドでは、teというインデックスとuserというタイプを作成し、6つのテストデータを挿入します.ブラウザで開くhttp://127.0.0.1:9200/_mappingインデックス、タイプの構造を表示できます.
次はクエリーできます.まず簡単なブールクエリーをしましょう.headプラグインに入力してクエリーすることができます.
1.クエリーcityはnanjingではなく、年齢32または15のuserであり、usernameおよびcityフィールドのみが表示されます.
メトリックの再集約-最小値の集約
2.クエリー年齢が15でmoneyが最も少ないuserのmoney数
次の結果を返します.
メトリックの集約をもう1つ作成-平均集約
3.すべてのuserのmoneyの平均値をクエリー
次の結果を返します.
もう一つのグループ(バケツ)重合-範囲重合をする
4.クエリーmoney範囲(-無限,1000)、[1000,3000)、[3000,+無限)の3区間のuser数
次の結果を返します.
パイプ集約をもう1つ作成-平均グループ集約
5.クエリmoney範囲(-無限,1000),[1000,3000],[3000,+無限)の3つの区間のそれぞれのuserのmoneyの合計
my_agg_nameはバケツ重合(「my_agg_name」の下に「buckets」)であり、
my_agg_name_2はメジャー集約です(「my_agg_name_2」の下に「value」があります).
次の結果を返します.
まとめ:本稿では,タイプuserを用いて5つの例を述べたが,タイプのネストには触れなかったが,入門したほうがよい例でもある.ソースコードhttps://download.csdn.net/download/qq_27311165/10470133ダウンロードします.(この圧縮ファイルの中の文字と本文のメモの差は多くありません.しかし、設定リソースは最低1点で無料ではありません.点数の少ないユーザーはダウンロードをお勧めしません)
{"index":{"_id":"1"}}
{"username":"aoa","money":1000,"age":32,"city":"nanjing"}
{"index":{"_id":"2"}}
{"username":"bob","money":2000,"age":15,"city":"nanjing"}
{"index":{"_id":"3"}}
{"username":"coc","money":3000,"age":15,"city":"beijing"}
{"index":{"_id":"4"}}
{"username":"dod","money":4000,"age":15,"city":"beijing"}
{"index":{"_id":"5"}}
{"username":"eoe","money":5000,"age":15,"city":"shanghai"}
{"index":{"_id":"6"}}
{"username":"fof","money":6000,"age":15,"city":"shanghai"}
上は12行でuserにコピーされていますjsonファイルの場合user.jsonファイルの末尾には必ず空白行を1行多くしなければなりません.そうしないと、6番目のデータ(ドキュメント)は挿入できません.
そしてuser.jsonが存在するフォルダの下で端末を開き、コマンドを入力
curl -XPOST "127.0.0.1:9200/te/user/_bulk?pretty" --data-binary @user.json
上記のコマンドでは、teというインデックスとuserというタイプを作成し、6つのテストデータを挿入します.ブラウザで開くhttp://127.0.0.1:9200/_mappingインデックス、タイプの構造を表示できます.
次はクエリーできます.まず簡単なブールクエリーをしましょう.headプラグインに入力してクエリーすることができます.
1.クエリーcityはnanjingではなく、年齢32または15のuserであり、usernameおよびcityフィールドのみが表示されます.
POST http://127.0.0.1:9200/te/user/_search
{
"_source":["username","city"],
"query":{
"bool":{
"must":[
{
"terms":{
"age":[32,15]
}
}
],
"must_not":{
"term":{
"city":"nanjing"
}
}
}
}
}
メトリックの再集約-最小値の集約
2.クエリー年齢が15でmoneyが最も少ないuserのmoney数
POST http://127.0.0.1:9200/te/user/_search
{
"query":{
"term":{
"age":15
}
},
"aggs":{
"my_agg_name":{
"min":{
"field":"money"
}
}
}
}
注意、戻り結果は「aggregations」で、「hits」ではなく、「hits」で返された結果は「query」の条件に対応します.次の結果を返します.
{
...
"aggregations":{
"my_agg_name":{
"value":2000
}
}
}
メトリックの集約をもう1つ作成-平均集約
3.すべてのuserのmoneyの平均値をクエリー
POST http://127.0.0.1:9200/te/user/_search
{
"aggs":{
"my_agg_name":{
"avg":{
"field":"money"
}
}
}
}
注意、戻り結果は「aggregations」にあり、「hits」にはありません.「query」がないため、「hits」にはすべてのuserが返されます.次の結果を返します.
{
...
"aggregations":{
"my_agg_name":{
"value":3500
}
}
}
もう一つのグループ(バケツ)重合-範囲重合をする
4.クエリーmoney範囲(-無限,1000)、[1000,3000)、[3000,+無限)の3区間のuser数
POST http://127.0.0.1:9200/te/user/_search
{
"aggs":{
"my_agg_name":{
"range":{
"field":"money",
"ranges":[
{"to":1000},
{"from":1000,"to":3000},
{"from":3000}
]
}
}
}
}
次の結果を返します.
{
...
"aggregations":{
"my_agg_name":{
"buckets":[
{
"key":"*-1000.0",
"to":1000,
"to_as_string":"1000.0",
"doc_count":0
},
{
"key":"1000.0-3000.0",
"from":1000,
"from_as_string":"1000.0",
"to":3000,
"to_as_string":"3000.0",
"doc_count":2
},
{
"key":"3000.0-*",
"from":3000,
"from_as_string":"3000.0",
"doc_count":4
}
]
}
}
}
パイプ集約をもう1つ作成-平均グループ集約
5.クエリmoney範囲(-無限,1000),[1000,3000],[3000,+無限)の3つの区間のそれぞれのuserのmoneyの合計
POST http://127.0.0.1:9200/te/user/_search
{
"aggs":{
"my_agg_name":{
"range":{
"field":"money",
"ranges":[
{"to":1000},
{"from":1000,"to":3000},
{"from":3000}
]
},
"aggs":{
"my_agg_name_child":{
"sum":{"field":"money"}
}
}
},
"my_agg_name_2":{
"avg_bucket":{"buckets_path":"my_agg_name>my_agg_name_child"}
}
}
}
戻り結果から見ると、my_agg_nameはバケツ重合(「my_agg_name」の下に「buckets」)であり、
my_agg_name_2はメジャー集約です(「my_agg_name_2」の下に「value」があります).
次の結果を返します.
{
...
"aggregations":{
"my_agg_name":{
"buckets":[
{
"key":"*-1000.0",
"to":1000,
"to_as_string":"1000.0",
"doc_count":0,
"my_agg_name_child":{
"value":0
}
},
{
"key":"1000.0-3000.0",
"from":1000,
"from_as_string":"1000.0",
"to":3000,
"to_as_string":"3000.0",
"doc_count":2,
"my_agg_name_child":{
"value":3000
}
},
{
"key":"3000.0-*",
"from":3000,
"from_as_string":"3000.0",
"doc_count":4,
"my_agg_name_child":{
"value":18000
}
}
]
},
"my_agg_name_2":{
"value":10500
}
}
}
まとめ:本稿では,タイプuserを用いて5つの例を述べたが,タイプのネストには触れなかったが,入門したほうがよい例でもある.ソースコードhttps://download.csdn.net/download/qq_27311165/10470133ダウンロードします.(この圧縮ファイルの中の文字と本文のメモの差は多くありません.しかし、設定リソースは最低1点で無料ではありません.点数の少ないユーザーはダウンロードをお勧めしません)