在elasticsearch中构建复合查询

时间:2018-03-21 05:57:48

标签: java elasticsearch logical-operators booleanquery

我试图在elasticsearch

中使用BoolQueryBuilder搜索以下案例
 select * from students where (name = "XXX" and rollno = 1) or (name = "YYY" and rollno = 2)

我必须为它构建查询构建器。

任何人都可以建议我使用BoolQueryBuilder来构建查询。

ElasticSearch 6.1.2

任何帮助都非常感激。

2 个答案:

答案 0 :(得分:1)

这是构建BooleanQueryBuilder条件的java api

        BoolQueryBuilder booleanQuery = QueryBuilders.boolQuery();
        booleanQuery.must(QueryBuilders.termQuery("name", "XXX"));
        booleanQuery.must(QueryBuilders.termQuery("rollno", 1));

        BoolQueryBuilder booleanQuery2 = QueryBuilders.boolQuery();
        booleanQuery2.must(QueryBuilders.termQuery("name", "YYY"));
        booleanQuery2.must(QueryBuilders.termQuery("rollno", 2));

        BoolQueryBuilder boolQueryBuilder3 = QueryBuilders.boolQuery();
        boolQueryBuilder3.should(booleanQuery2);
        boolQueryBuilder3.should(booleanQuery);

答案 1 :(得分:0)

这是:

GET students/_search
{
  "query": {
  "bool": {
     "should": [
        {
           "bool": {
              "must": [
                 {
                    "term": {
                       "name": {
                          "value": "XXX"
                       }
                    }
                 },
                 {
                    "term": {
                       "rollno": {
                          "value": "1"
                       }
                    }
                 }
              ]
           }
        },
        {
           "bool": {
              "must": [
                 {
                    "term": {
                       "name": {
                          "value": "YYY"
                       }
                    }
                 },
                 {
                    "term": {
                       "rollno": {
                          "value": "2"
                       }
                    }
                 }
              ]
           }
        }
     ]
  }}}

基本上,bool复合查询可以应用到更深层次。其余的是关于ORAND操作的使用方式。 在这种情况下,should映射到ORmust映射到AND

干杯,