我们已经介绍了如何使用不同的条件查询来构建查询并搜索数据。我们还熟知了评分,它告诉我们在给定的查询中,哪些文档更重要以及查询文本如何影响排序。然而,有时我们可能要在不影响最后分数的情况下,选择索引中的某个子集,这就要使用过滤器。
如果可以,应该尽可能使用过滤器。过滤器不影响评分,而得分计算让搜索变得复杂,而且需要CPU资源。
/** * 范围过滤器 * */@Testpublic 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);}
/** * 布尔过滤器 * */@Testpublic 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);}