Как выполнить bool Queries в ElasticSearch с помощью Java Api? - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь отправить запрос bool против моегоasticSearch, который отфильтровывает документы.Как я могу отфильтровать логические выражения, такие как (A и B и C), и (D, или E, или F), и G, с BooleanQueryBuilder Api в Java?Я пытался с методом фильтра, но я не получаю результатов обратно.Например:

Представьте себе A, B, C, D, E, F, G - это события, где атрибут «имя» должен соответствовать, например, «Робин».

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 Ответ

0 голосов
/ 26 апреля 2019

Это один?

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 ORF)
    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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...