我们已经介绍了如何使用不同的条件查询来构建查询并搜索数据。我们还熟知了评分,它告诉我们在给定的查询中,哪些文档更重要以及查询文本如何影响排序。然而,有时我们可能要在不影响最后分数的情况下,选择索引中的某个子集,这就要使用过滤器。
如果可以,应该尽可能使用过滤器。过滤器不影响评分,而得分计算让搜索变得复杂,而且需要CPU资源。
1:范围过滤器
/**
* 范围过滤器
*
*/
@Test
public void rangeQueryFilter(){
SearchRequestBuilder builder = client.prepareSearch("blog").setTypes("document");
SearchResponse searchResponse = builder.setPostFilter(QueryBuilders.rangeQuery("id").from(1).to(3)
).get();
SearchHits hits = searchResponse.getHits();//获取数据的结果集对象
//遍历
printSearch(hits);
}
2:布尔过滤器
/**
* 布尔过滤器
* */
@Test
public void boolQueryFilter(){
SearchRequestBuilder builder = client.prepareSearch("blog").setTypes("document");
SearchResponse searchResponse = builder.setPostFilter(
QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("title", "服务器"))
.should(QueryBuilders.termQuery("comment", "服务器"))
).get();
SearchHits hits = searchResponse.getHits();
//遍历
printSearch(hits);
}