在Elasticsearch Java API中创建Filtered查询时我有点困惑.SearchRequestBuilder类有setPostFilter方法,这个方法的javadoc清楚地表明在执行Query之后将应用过滤器.
但是,没有setFilter方法或其他一些允许在
执行查询之前应用过滤器的方法.如何创建过滤查询(在执行查询之前基本上应用过滤器)?我错过了什么吗?
Bla*_*POP 30
FilteredQueryBuilder builder =
QueryBuilders.filteredQuery(QueryBuilders.termQuery("test",
"test"),FilterBuilders.termFilter("test","test"));
Run Code Online (Sandbox Code Playgroud)
它将构建过滤后的查询...对于filteredQuery,第一个参数是查询,第二个参数是Filter.
更新:过滤查询在elasticsearch 2.0+中折旧.参考
希望能帮助到你..!
QueryBuilders.filteredQuery
在API v.2.0.0及更高版本中已弃用.
相反,过滤器和查询具有"平等权利".FilterBuilders
不再存在,所有过滤器都是使用构建的QueryBuilders
.
要仅使用过滤器(在本例中为地理过滤器)实现查询,您现在可以:
QueryBuilder query = QueryBuilders.geoDistanceQuery("location")
.point(center.getLatitude(), center.getLongitude())
.distance(radius, DistanceUnit.METERS);
// and then...
SearchResponse resp = client.prepareSearch(index).setQuery(query);
Run Code Online (Sandbox Code Playgroud)
如果你想用两个方面来查询,你将需要使用boolQuery
具有must
:
QueryBuilder query = QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("user", "ben"))
.must(QueryBuilders.termQuery("rank", "mega"));
// and then...
SearchResponse resp = client.prepareSearch(index).setQuery(query);
Run Code Online (Sandbox Code Playgroud)
如果您只想在没有查询的情况下执行过滤器,您可以这样做:
FilteredQueryBuilder builder = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.termFilter("username","stackoverflow"));
Run Code Online (Sandbox Code Playgroud)
参考:无需查询即可过滤
归档时间: |
|
查看次数: |
28540 次 |
最近记录: |