FilteredQueryBuilder已弃用

时间:2017-01-11 11:10:11

标签: elasticsearch

FilteredQueryBuilder和QueryFilterBuilder有什么区别,因为自2.0以来它们都被弃用,而FilteredQueryBuilder的替代java代码

 FilteredQueryBuilder filteredQueryBuilder = QueryBuilders.filteredQuery(termsQueryBuilder, null); 
 QueryFilterBuilder queryFilterBuilder = FilterBuilders.queryFilter(esQueryBuilder);

2 个答案:

答案 0 :(得分:5)

由于现在已经合并了查询和过滤器,因此这些构造不再有意义。

FilteredQueryBuilder用于创建filtered query,即由一组过滤器约束的得分查询。您现在应该使用

,而不是使用FilteredQueryBuilder
  • 使用bool/filter
  • 创建的QueryBuilders.boolQuery().filter(...)
  • 或使用bool/must_not创建的QueryBuilders.boolQuery().mustNot(...),如果您需要否定过滤器

QueryFilterBuilder用于创建query filter,即过滤后的上下文中的非评分查询。现在应该

,而不是使用QueryFilterBuilder
  • 如果您需要和您的查询
  • ,请使用bool/must创建的QueryBuilders.boolQuery().must(...)查询
  • 或使用bool/should创建的QueryBuilders.boolQuery().should(...),如果您需要或您的查询

答案 1 :(得分:0)

根据Compound queries -> Bool query,您应该实现过滤器al bool 查询。

QueryBuilder qb = boolQuery()
    .must(termQuery("content", "test1"))    
    .must(termQuery("content", "test4"))    
    .mustNot(termQuery("content", "test2")) 
    .should(termQuery("content", "test3"))  
    .filter(termQuery("content", "test5"));