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

**URL:** <https://discuss.elastic.co/t/elasticsearch-index/70122>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [December 28, 2016, 9:35am UTC](https://discuss.elastic.co/t/elasticsearch-index/70122 "2016-12-28T09:35:54Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![aurantiacus](https://avatars.discourse-cdn.com/v4/letter/a/ebca7d/32.png) [@aurantiacus](https://discuss.elastic.co/u/aurantiacus)\
**Post date:** [December 28, 2016, 9:35am UTC](https://discuss.elastic.co/t/elasticsearch-index/70122/1 "2016-12-28T09:35:54Z")

</div>

環境  
・elasticsearch 2.4.3

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

発行クエリ

> curl -XGET [http://xxxxxxxxx:9200/packetbeat-\*/http/\_search?pretty](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分だけでした。  
何か間違いなどがあるのでしょうか？  
間違いがない場合、取得できないほかの理由は何か思いつきますでしょうか？

---

<div class="post-metadata">

**Author:** ![johtani](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/johtani/32/44956_2.png) [@johtani](https://discuss.elastic.co/u/johtani)\
**Post date:** [December 28, 2016, 9:54am UTC](https://discuss.elastic.co/t/elasticsearch-index/70122/2 "2016-12-28T09:54:57Z")

</div>

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

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

---

<div class="post-metadata">

**Author:** ![aurantiacus](https://avatars.discourse-cdn.com/v4/letter/a/ebca7d/32.png) [@aurantiacus](https://discuss.elastic.co/u/aurantiacus)\
**Post date:** [December 28, 2016, 10:42am UTC](https://discuss.elastic.co/t/elasticsearch-index/70122/3 "2016-12-28T10:42:40Z")

</div>

ありがとうございます。

日付の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点確認したいのですが

１.検索クエリの結果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}}'

---

<div class="post-metadata">

**Author:** ![johtani](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/johtani/32/44956_2.png) [@johtani](https://discuss.elastic.co/u/johtani)\
**Post date:** [December 28, 2016, 11:50am UTC](https://discuss.elastic.co/t/elasticsearch-index/70122/4 "2016-12-28T11:50:21Z")

</div>

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/reference/2.3/returning-only-agg-results.html)

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

---

<div class="post-metadata">

**Author:** ![aurantiacus](https://avatars.discourse-cdn.com/v4/letter/a/ebca7d/32.png) [@aurantiacus](https://discuss.elastic.co/u/aurantiacus)\
**Post date:** [December 28, 2016, 12:13pm UTC](https://discuss.elastic.co/t/elasticsearch-index/70122/5 "2016-12-28T12:13:58Z")

</div>

ありがとうございます！

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

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

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

---

<div class="post-metadata">

**Author:** ![johtani](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/johtani/32/44956_2.png) [@johtani](https://discuss.elastic.co/u/johtani)\
**Post date:** [December 28, 2016, 12:47pm UTC](https://discuss.elastic.co/t/elasticsearch-index/70122/6 "2016-12-28T12:47:49Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [January 25, 2017, 12:48pm UTC](https://discuss.elastic.co/t/elasticsearch-index/70122/7 "2017-01-25T12:48:10Z")

</div>

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