【发布时间】:2016-11-24 05:03:10
【问题描述】:
我是 ElasticSearch 的新手,所以请放轻松。我查看了 elastic.co 并搜索了很多内容以找出正确的 Java 过滤器和查询,以便仅提取将在接下来 x 天到期的文档,其中 x 是用户传入的值应用程序,也是 Elastic 中每个文档上设置的 ttl。
我在将请求传递给 Elastic 的 FilterBuilders 上尝试了各种过滤器,例如 rangeFilter、boolFilter,例如:
Raw Source: {
"from" : 0,
"size" : 20, "filter" : {
"bool" : {
"should" : {
"range" : {
"_ttl" : {
"from" : 2000,
"to" : 2160000000,
"include_lower" : false,
"include_upper" : true
}
}
}
}
},
"explain" : false,
"fields" : [ "_ttl", "_source" ],
"sort" : [ {
"created" : {
"order" : "desc"
}
} ]
}
搜索的Java代码如下:
SearchRequestBuilder srb = client.prepareSearch(index).setTypes(type).addFields("_ttl", "_source")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setExplain(false);
if (query != null) srb.setQuery(query);
if (filter != null) srb.setPostFilter(filter);
LOG.debug("Raw Source: {}\n", srb.toString());
// Fetch the Document response from the index
SearchResponse response = srb.execute().actionGet();
传入的过滤器是:
(FilterBuilders.boolFilter().should(FilterBuilders.rangeFilter(_ttl).gt(2000).lte(2160000000)));
查询、索引、类型等其他参数被传递到代码中。目前只有索引和类型被传递给代码而不是查询(空)
上述对 Elastic 的查询产生零命中,因此显然有些问题。我确实有多个文件在 15 天内到期。任何帮助将不胜感激。
谢谢
【问题讨论】:
-
你用的是什么版本的ES?
-
使用版本 0.90.10
标签: java search elasticsearch ttl