Elasticsearchのindexを跨った検索について


#1

環境
・elasticsearch 2.4.3

index
・packetbeat-yyyymmdd
※packetbeat-20161201~packetbeat-20161215とインデックスが日付ごとに存在
シャード 5分割

発行クエリ

curl -XGET http://xxxxxxxxx:9200/packetbeat-*/http/_search?pretty -d "{"size" : 1000000,"filter" : {"range" : {"@timestamp" : {"gte" : "2016-12-1","lte" : "2016-12-5"}}}, "fields" : ["@timestamp", "method", "beat.hostname", "path"], "query" : {"query_string" : {"query":"test_no : 1" }}, "sort" : [{"@timestamp" : "asc"}]}" -o http_json.txt

elasticsearchからxgetにてクエリを発行した結果を加工したいと考えています。

下記のようなクエリを発行した場合、indexを跨っていても指定した日付の範囲のデータを取得してくれるものと考えていたのですが、取得できていませんでした。

20161201~20161215まで各indexが作成されている中から
20161205~20161210までのpacketbeatのログを取得したいのですが
下記発行クエリで取得できるものは20161205分だけでした。
何か間違いなどがあるのでしょうか?
間違いがない場合、取得できないほかの理由は何か思いつきますでしょうか?


(Jun Ohtani) #2

日付の書式がformatとが違っているのだと。
0埋めされていないとダメかと

https://www.elastic.co/guide/en/elasticsearch/reference/2.3/mapping-date-format.html


#3

ありがとうございます。

日付の0埋めされていないからということですね。
0埋め忘れていたので正常に動作するようになったのですが、
もう一つ問題が発生しました。

少し前までelasticsearchのバージョンを1.7を使用していて
今回の質問の環境で2.4を使用しているのですが、

Result window is too large, from + size must be less than or equal to: [10000] but was [10000000]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level parameter.

というエラーが出ました。

よくよく調べてみるとindex.max_result_windowがmax10000に対して
xgetでsize=10000以上の値を設定し、その結果docも10000を超えたため出てきたエラーだと認識しています。

このmax_result_windowについて3点確認したいのですが

1.検索クエリの結果docが10000を超えるかどうかということであれば、
仮にindexに100万のdocが存在し、aggsした各集計結果(集計した値ごとに)が1万以下のレコードだった場合
エラーにはならないという認識であってますでしょうか?

2.この値の初期値を変更したい場合、elasticsearch.ymlファイルに
index.max_result_window=10000000
を設定したらよいと書かれていましたが、
「これから作成されるindex」に対して設定されるという認識ですがあってますでしょうか?

3.既に作成済みのindexに対して値を1万から100万に変更したい場合、下記コマンドを各indexに対して行えばよいでしょうか?

curl -X PUT localhost:9200/packetbeat-20161201/_settings -d '{ "index": { "max_result_window": 1000000}}'


(Jun Ohtani) #4

xgetとは何を意味していますか?

なぜ100万件を取得したいのですか?
ログに出ている通り、大量データを取得したい場合は、scroll apiを調べてみてください。

あと、sizeとaggsの計算結果に関係はありません。
https://www.elastic.co/guide/en/elasticsearch/reference/2.3/returning-only-agg-results.html

まずは、この辺りを読んでみてはどうでしょうか?
https://www.elastic.co/guide/en/elasticsearch/guide/current/aggregations.html


#5

ありがとうございます!

xgetは「curl -XGET ...」のRESTという意味で書きました。
※curl -XGET は elasticsearchの参考書に記述があったので使用していました。

elasticsearchには多くの機能があり、表層部分しか触れておらず
まだまだ理解できていないものと実感しています。

教えていただいたscroll apiや各リンクを参照させていただきます。


(Jun Ohtani) #6

なるほど。
-XGETはcurlコマンドのオプションなので、あまりelasdticsearchには関係ないです。
次からは_で始まる機能名、例えば_searchなど書いていただくとどういうことをしたいのかが伝わるかと。
あとは、どんなことをしたくて何をやったらうまくいかなかったかを書くとその機能ではなく他のものの方が良いなどの助言ももらえると思います。


(system) #7

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.