2017-01-11 16 views
3

是什麼FilteredQueryBuilder和QueryFilterBuilder之間既和替代Java代碼FilteredQueryBuilderFilteredQueryBuilder棄用

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

回答

4

由於查詢和過濾器現在已經合併,這些結構已經沒有意義了。用於創建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(...)如果你需要或您的數據庫查詢
+0

FilteredQueryBuilder filteredQueryBuilder = QueryBuilders.filteredQuery(catQuery,catalogEnabledFilter); 替代方案 - > BoolQueryBuilder filteredQueryBuilder = QueryBuilders.boolQuery()。filter(catQuery).filter(catalogEnabledFilter);這是否正確 –

+0

是的,這是正確的 – Val

0

的差別,因爲2.0中棄用據Compound queries -> Bool query你應該實現過濾器人布爾查詢。

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