繁体   English   中英

如何在java中的弹性搜索Querybuilder中处理多个“和”“或”运算符

[英]How to handle multiple 'and' 'or' operators in Elastic search Querybuilder in java

我有一个 POST 正文 JSON,它具有如下输入之一

    q = (a=1 and b=2 or c=3 and d=8)

我需要使用java形成一个querybuilder弹性查询

BoolQueryBuilder qb = QueryBuilders.boolQuery();
qb1= QueryBuilders.matchQuery("a", "1");
qb2= QueryBuilders.matchQuery("b", "2");
qb3= QueryBuilders.matchQuery("c", "1");
qb4= QueryBuilders.matchQuery("d", "1");

qb.must(qb1);
qb.must(qb2);
qb.should(qb3);
qb.must(qb4);

弹性搜索是否会先处理和操作,然后再考虑。

如何处理多个和和或组合(用户可以自由输入任何内容)。 我是 Elastic 搜索的新手,希望得到一些帮助

我认为bool查询可能对您有帮助

{
    "bool" : {
        "should" : [
            { "must" : { "term" : { "a" : "1" } } },
            { "must" : { "term" : { "b" : "1" } } }
        ]
        "should" : [
            { "must" : { "term" : { "c" : "1" } } },
            { "must" : { "term" : { "d" : "1" } } }
        ]
    }
}

分享一个伪代码,希望有帮助

elasticbuilder.boolQuery().should([
    elasticbuilder.boolQuery().must([
        elasticbuilder.matchQuery(1)
        elasticbuilder.matchQuery(2)    
    ])
    elasticbuilder.boolQuery().must([
        elasticbuilder.matchQuery(3)
        elasticbuilder.matchQuery(4)
    ])
])

通常我只是在 Kibana 中创建一个示例查询,然后将它“翻译”到 Java 客户端 api。 不确定这是否适用于您,但如果您想创建全文搜索,您可以根据ES 文档中的内容向用户提供提示。

The simple_query_string query supports the following operators: + signifies AND operation | signifies OR operation - negates a single token " wraps a number of tokens to signify a phrase for searching * at the end of a term signifies a prefix query ( and ) signify precedence ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM