弹性搜索:查询以获取所有元素

时间:2018-12-01 14:20:00

标签: elasticsearch

我无法获取所有物品,最大不能超过大小:10000。 谢谢

  

错误:[query_phase_execution_exception]结果窗口太大,   from + size必须小于或等于:[10000],但为[90000]。   请参阅滚动API,以更有效地请求大数据   套。可以通过更改[index.max_result_window]设置此限制   索引级别参数。

任何想法我该如何解决?

GetTweets: function (callback) {
        client.search({
            index: 'twitter',
            type: 'tweet',
            size:10000,
            body: {
                query: {
                    "query": {
                        "match_all": {}
                    }
                }
            }
        }, function (err, resp, status) {
            callback(err,resp);
        });
    },

2 个答案:

答案 0 :(得分:1)

search_after可用于应用分页。比Scroll Api更为有效

GET twitter/_search
{
    "size": 10,
    "query": {
        "match" : {
            "title" : "elasticsearch"
        }
    },
    "search_after": [1463538857, "654323"],
    "sort": [
        {"date": "asc"},
        {"tie_breaker_id": "asc"}
    ]
 }

ES文档:       It is very similar to the scroll API but unlike it, the search_after parameter is stateless, it is always resolved against the latest version of the searcher

答案 1 :(得分:0)

Elasticsearch的默认功能是在 10000 窗口之后即刻不立即获取数据。 size:10000或更高。在scroll api处请参见此处,由于该限制,您将无法获得错误提示。

  

“结果”窗口太大,“ +”号必须小于或等于:[10000]

尝试滚动API 之类的

curl -XGET 'localhost:9200/twitter/tweet/_search?scroll=1m' -d '
{
    "query": {
        "match" : {
            "title" : "elasticsearch"
        }
    }
}
'

上述请求的结果中包含一个_scroll_id,该curl -XGET 'localhost:9200/_search/scroll' -d' { "scroll" : "1m", "scroll_id" : "c2Nhbjs2OzM0NDg1ODpzRlBLc0FXNlNyNm5JWUc1" } ' 应该传递给滚动API以便检索下一个批结果。

python

NB 我已经使用了phperrors版本的Elasticsearch客户端api。滚动API确实很棒,而且非常灵活,可以使用它来获取数据集。