[英]How to do bool Queries in ElasticSearch with Java Api?
iam trying to send a bool query against my elasticSearch, that filters out documents.我正在尝试针对我的 elasticSearch 发送布尔查询,以过滤掉文档。 How can i filter boolean expressions like (A AND B AND C) AND (D OR E OR F) AND G with BooleanQueryBuilder Api in Java?
我如何在 Java 中使用 BooleanQueryBuilder Api 过滤布尔表达式,如 (A AND B AND C) AND (D OR E OR F) AND G? I tried with the filter method, but i get no results back.
我尝试使用过滤方法,但没有得到任何结果。 For example:
例如:
Imagine A, B, C, D, E, F, G are events where the attribute "name" must match "Robin" for example.例如,假设 A、B、C、D、E、F、G 是属性“name”必须与“Robin”匹配的事件。
private QueryBuilder getQueryBuilder() {
BoolQueryBuilder boolQueryBuilder1 = QueryBuilders
.boolQuery()
.filter(QueryBuilders.matchQuery(D).operator(Operator.OR))
.filter(QueryBuilders.matchQuery(E).operator(Operator.OR))
.filter(F);
BoolQueryBuilder boolQueryBuilder2 = QueryBuilders
.boolQuery()
.filter(QueryBuilders.matchQuery(A).operator(Operator.AND))
.filter(QueryBuilders.matchQuery(B).operator(Operator.AND))
.filter(QueryBuilders.matchQuery(C));
BoolQueryBuilder boolQueryBuilder3 = QueryBuilders
.boolQuery()
.filter(G);
BoolQueryBuilder boolQueryBuilder = QueryBuilders
.boolQuery()
.filter(boolQueryBuilder1)
.filter(boolQueryBuilder2)
.filter(boolQueryBuilder3);
return boolQueryBuilder;
}
I know this example is not very good, but i hope u can help me!我知道这个例子不是很好,但我希望你能帮助我! Thanks!
谢谢!
Is this one?这是一个吗?
private static QueryBuilder getQueryBuilder() {
//condition
MatchQueryBuilder A = QueryBuilders.matchQuery("content", "A");
MatchQueryBuilder B = QueryBuilders.matchQuery("content", "B");
MatchQueryBuilder C = QueryBuilders.matchQuery("content", "C");
MatchQueryBuilder D = QueryBuilders.matchQuery("content", "D");
MatchQueryBuilder E = QueryBuilders.matchQuery("content", "E");
MatchQueryBuilder F = QueryBuilders.matchQuery("content", "F");
MatchQueryBuilder G = QueryBuilders.matchQuery("name", "Robin");
//Maybe you should use TermQuery
//TermQueryBuilder G = QueryBuilders.termQuery("name", "Robin");
//1.(A AND B AND C)
BoolQueryBuilder query1 = QueryBuilders.boolQuery();
query1.must(A).must(B).must(C);
//2.(D OR E OR F)
BoolQueryBuilder query2 = QueryBuilders.boolQuery();
query2.should(D).should(E).should(F);
//3.Last
BoolQueryBuilder lastQuery = QueryBuilders.boolQuery();
lastQuery.must(query1).must(query2).must(G);
//use filter
BoolQueryBuilder filterBuiler = QueryBuilders.boolQuery().filter(lastQuery);
return filterBuiler;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.