有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何使用Java Api在ElasticSearch中执行布尔查询?

我正试图发送一个针对elasticSearch的bool查询,它过滤掉了文档。如何使用Java中的BooleanQueryBuilderAPI过滤布尔表达式,如(A、B和C)和(D或E或F)和G?我尝试了过滤方法,但没有得到任何结果。例如:

例如,假设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;

}

我知道这个例子不是很好,但我希望你能帮助我! 谢谢


共 (1) 个答案

  1. # 1 楼答案

    是这个吗

    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;
    }