2017-03-10 4 views
1

Ich möchte eine Abfrage mit Elasticsearch Java API erstellen, aber ich weiß nicht, wie Sie eine OR-Klausel erstellen? Was ich abfragen möchte, ist;So erstellen Sie eine Suche mit oder Klausel mit Elasticsearch

SELECT * 
FROM USERS 
WHERE (user.name = "admin") AND (user.message LIKE "test*") AND (user.age = "30" OR user.status = "major") 

Ich habe eine Abfrage wie unten erstellt, aber ich weiß nicht, wie eine OR-Klausel wie SQL-Abfrage erstellen;

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); 

boolQueryBuilder.must(QueryBuilders.matchQuery("name", "admin")); 
boolQueryBuilder.must(QueryBuilders.matchQuery("message", "test*")); 

boolQueryBuilder.must(QueryBuilders.matchQuery("age", "30")); 
boolQueryBuilder.must(QueryBuilders.matchQuery("status","major")); 

Antwort

3

Sie müssen einfach nur die OR-Bedingung in einer anderen bool/should Abfrage

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); 

boolQueryBuilder.must(QueryBuilders.matchQuery("name", "admin")); 
boolQueryBuilder.mustNot(QueryBuilders.matchQuery("message", "test*")); 

BoolQueryBuilder orQuery = QueryBuilders.boolQuery(); 
orQuery.should(QueryBuilders.matchQuery("age", "30")); 
orQuery.should(QueryBuilders.matchQuery("status","major")); 
orQuery.minimumNumberShouldMatch(1); 
boolQueryBuilder.must(orQuery); 

PS erfassen: nicht sicher, warum Sie eine mustNot für Ihre zweite Bedingung haben.

+0

Sorry, mein Fehler ist nicht "mustNot". Übrigens ist meine "Gefällt mir" -Abfrage korrekt? (Ich meine QueryBuilders.matchQuery ("message", "test *")) – hellzone

+0

Sie können in 'match'-Abfragen keine Platzhalter verwenden, stattdessen können Sie stattdessen' queryStringQuery' oder 'wildcardQuery' verwenden – Val

Verwandte Themen