2017-03-09 60 views
1

我正在嘗試編寫一些Java代碼來查詢ES5實例。在ES1中,您可以使用OR和AND過濾器,或者Filter和andFilter。 ES5中的等效物是什麼?我曾嘗試 -Elasticsearch 2+ JAVA API或篩選器

QueryBuilder fb1 = QueryBuilders.termQuery("term1", "value1"); 
QueryBuilder fb2 = QueryBuilders.termQuery("term1", "value2"); 
QueryBuilder fb3 = QueryBuilders.termQuery("term2", "value3"); 

QueryBuilder fb = QueryBuilders.boolQuery() 
         .must(fb1) 
         .should(fb2) 

This gives results that match fb1, so this is not an OR 

QueryBuilder fb = QueryBuilders.boolQuery() 
         .must(fb1) 
         .must(fb2) 

This gives no results, so the AND worked. 

我想弄清楚建設的途徑和,或查詢

回答

0

從ElasticSearch文檔(https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-compound-queries.html):

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

必須好像它可能是相當於AND並且應該喜歡它是OR的等價物。

+0

不,這不起作用 – user2689782

+0

什麼不行?你可以發佈你正在嘗試的嗎? – kfox

+0

OK,我要張貼以上正是我在做...... – user2689782

0

可以使用BoolQueryBuiler這些過濾器:

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()必須(QueryBuilders.termQuery( 「客戶ID」,客戶ID))

boolQueryBuilder.mustNot(QueryBuilders.termsQuery( 「原因」,「失敗」));

    boolQueryBuilder.should(QueryBuilders.termsQuery("action", "deny")).minimumNumberShouldMatch(1); 

QueryBuilder queryBuilder = boolQueryBuilder; ().setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setQuery(queryBuilder);().setSearch(sc.getIndexNames())。setTypes(sc.getTypeName())。setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setQuery(queryBuilder);

+0

我不知道我瞭解以上內容。你如何實現OR查詢? – user2689782

+0

使用minimumNumberShouldMatch(1) - >您可以添加多個應用過濾器,如果您將minimumNumberShouldMatch設置爲一個,它至少會嘗試匹配其中一個過濾器。 – Sindhu

2

爲了進行AND查詢,將所有條件都置於「必須」中。

QueryBuilder fb = QueryBuilders.boolQuery().must(fb1).must(fb2); 

爲了進行OR查詢,將所有條件都放入「應該」。

QueryBuilder fb = QueryBuilders.boolQuery().should(fb1).should(fb2);