2017-03-09 5 views
1

Ich versuche, Java-Code zu schreiben, um eine ES5-Instanz abzufragen. In ES1 könnten Sie OR und AND filtern, oder Filter und andFilter. Was ist das Äquivalent in ES5? Ich habe versucht -Elasticsearch 2+ JAVA API orFilter

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. 

Ich möchte Möglichkeiten, um herauszufinden, von der Konstruktion AND, OR abfragt

Antwort

0

Von Elasticsearch Dokumentation (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")); 

Muss scheint, wie es das Äquivalent sein könnte von das UND und soll es ist das Äquivalent des OR.

+0

Nein, das funktioniert nicht – user2689782

+0

Was funktioniert nicht? Kannst du posten, was du versuchst? – kfox

+0

OK, ich werde oben genau schreiben, was ich tue ... – user2689782

0

Sie können BoolQueryBuiler für diese Filter verwenden.

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery() muss (QueryBuilders.termQuery ("customerId", customerId))

boolQueryBuilder.mustNot (QueryBuilders.termsQuery ("Grund", "fehlgeschlagen"));

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

AbfrageBuilder queryBuilder = boolQueryBuilder;

neue SearchContext(). PrepareSearch (sc.getIndexNames()). SetTypes (sc.getTypeName()). SetSearchType (SearchType.DFS_QUERY_THEN_FETCH) .setQuery (queryBuilder);

+0

ich nicht sicher bin ich verstehe das oben. Wie erreichen Sie eine OR-Abfrage? – user2689782

+0

Mit minimumNumberShouldMatch (1) -> können Sie mehrere Soll-Filter hinzufügen, und wenn SieminimumNumberShouldMatch als Eins festlegen, wird zumindest versucht, einen dieser Filter zu finden. – Sindhu

2

Um eine UND-Abfrage zu machen, setzen Sie alle Bedingungen in "müssen".

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

Um eine ODER-Abfrage zu machen, setzen Sie alle Bedingungen in "sollten".

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