2014-12-02 35 views
4

目前我查詢ES單個鍵值對這樣的:的Java API來匹配elasticsearch多個領域

String query_key = "abc"; 
String query_val = "def"; 

searchRequestBuilder.setQuery(QueryBuilders.matchQuery(query_key, query_val)).execute().actionGet(); 

現在,而不是單一的鍵值對,我有以下鍵值對地圖:Map<String,String> query_list

我該如何修改它?

回答

13

您可以使用MuliMatchQueryBoolean Query來滿足您的要求。

例如: -

BoolQueryBuilder boolQuery = new BoolQueryBuilder(); 
for (Map.Entry<String, String> entry : fields.entrySet()){ 
    boolQuery.must(QueryBuilders.matchQuery(entry.getKey(), entry.getValue())); 
} 

設置此boolQuerysearchRequest閱讀elasticsearch boolQueries並使用一個適合哪些對您的要求。

上述示例將在提供的字段中執行AND操作。 field1field2必須匹配。如果您想執行OR操作,那麼您應該使用sould查詢,您可以選擇設置minimum_should_match,因爲您可以指定最少的字段應該匹配。

+0

簡短而簡單的感謝:) – 2016-02-04 19:22:13