0

大きなインデックスで一致するすべてのドキュメントを取得したいので、非常に大きなサイズを使用して大きなインデックスをクエリしましたが、しばらくしてタイムアウトになりました。結果は返されません。タイムアウトせずにすべてのデータを取得する他の方法はありますか? 私のクエリ:

{
"size": 90000000,
"query": { 
    "filtered": {"query": {"match_all":{}},"filter":{"term": {"isbn": 475869}}
    }
  }
}
4

1 に答える 1

0

大量のデータを取得する必要がある場合は、スクロールを使用する必要があります。

まず、クエリでスクロールを開始します。

curl -XGET 'localhost:9200/your_index/your_type/_search?scroll=1m' -d '{
    "size": 5000,
    "query": {
        "term" : {
            "isbn" : "475869"
        }
    }
}'

次に、最初の 5000 個のドキュメントと_scroll_id、後続の要求を実行するために使用できるトークンを応答で取得します。

scroll_id次に、結果が得られなくなるまで、5000 個のドキュメントの次のバッチを取得するために、前の応答からのトークンを使用して次の要求を繰り返し実行できます。

curl -XGET  'localhost:9200/_search/scroll' -d '{
    "scroll" : "1m", 
    "scroll_id" : "c2Nhbjs2OzM0NDg1ODpzRlBLc0FXNlNyNm5JWUc1" 
}'

Jest を使用しているので、SearchScroll使用できるクラスがあります。そのクラスがどのように使用されているかをテストケースで確認してください。

于 2016-05-19T05:17:38.287 に答える