我正在尝试使用Java API执行扫描和滚动查询,同时将其与范围查询相结合,但我没有得到任何点击。我不确定我的查询或数据是否有问题,但下面是我的代码:
String from = "1429192800000";
String to = "1429193100000";
QueryBuilder qb = rangeQuery("myField")
.gte(from)
.lte(to);
SearchRequestBuilder searchBuilder = client.prepareSearch(oldIndex)
.setTypes("myType")
.setSearchType(SearchType.SCAN)
.setScroll(new TimeValue(60000))
.setQuery(qb)
.setSize(100);
这是我的输出:
{
"_scroll_id" : my64BitScrolliD,
"took" : 576,
"timed_out" : false,
"_shards" : {
"total" : 15,
"successful" : 15,
"failed" : 0
},
"hits" : {
"total" : 0,
"max_score" : 0.0,
"hits" : [ ]
}
}
我尝试过不使用java api进行查询,但仍然没有返回任何命中。这是我的疑问:
curl -XGET "http://localhost:9220/path/to/cluster/myIndex/myType/_search?search_type=scan&scroll=1m -d '{
"size": 100,
"query": {
"range": {
"myField": {
"from": "1429192800000",
"to": "1429193100000"
}
}
}
}'
我得到与上面相同的输出。我已应用范围查询的字段包含一个纪元时间戳,并且数据存在于指定范围之间,因此我认为查询没有错误(我已经使用_search API测试了它而没有使用扫描和滚动它返回了我命中!)。
我想补充一点,如果我不将范围查询与它结合使用,扫描和滚动查询就可以了!由于存在大量数据,因此我希望通过指定时间范围来批量获取结果。我错过了一些基本的东西吗?如果需要更多信息,请与我们联系。