• ElasticSearch---es用should表示or的逻辑


    should

    在使用es时,如果需要用到or逻辑,可以使用should。

    minimum_should_match

    should,可以配合 minimum_should_match 使用。
    minimum_should_match是最低匹配度, minimum_should_match为1, 表示should条件中,至少有一项符合。

    注意,should和must一起用,should会失效,加上minimum_should_match 就可以了。

    示例1

    比如, a && (b or c) ,可以如下所示:

    {
      "bool" : {
        "filter" : [
          {
            "terms" : {
              "查询条件a" : [
                "a值"
              ],
              "boost" : 1.0
            }
          }
        ],
        "should" : [
          {
            "terms" : {
              "查询条件b" : [
                "b值"
              ],
              "boost" : 1.0
            }
          },
          {
            "terms" : {
              "查询条件c" : [
                "c值"
              ],
              "boost" : 1.0
            }
          }
        ],
        "disable_coord" : false,
        "adjust_pure_negative" : true,
        "minimum_should_match" : "1",
        "boost" : 1.0
      }
    }
    

    对应的java代码如下:

            BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
            boolQuery.filter(QueryBuilders.termsQuery("查询条件a", "a值"));
            boolQuery.should(QueryBuilders.termsQuery("查询条件b", "b值"))
                    .should(QueryBuilders.termsQuery("查询条件c", "c值"))
                    .minimumShouldMatch(1);
    

    示例2

    比如, a && ((b && c) or (d && e)) ,可以如下所示:

    {
      "bool" : {
        "filter" : [
          {
            "terms" : {
              "查询条件a" : [
                "值a"
              ],
              "boost" : 1.0
            }
          }
        ],
        "should" : [
          {
            "bool" : {
              "must" : [
                {
                  "terms" : {
                    "查询条件b" : [
                      "值b"
                    ],
                    "boost" : 1.0
                  }
                },
                {
                  "term" : {
                    "查询条件c" : {
                      "value" : "值c",
                      "boost" : 1.0
                    }
                  }
                }
              ],
              "disable_coord" : false,
              "adjust_pure_negative" : true,
              "boost" : 1.0
            }
          },
          {
            "bool" : {
              "must" : [
                {
                  "terms" : {
                    "查询条件d" : [
                      "值d"
                    ],
                    "boost" : 1.0
                  }
                },
                {
                  "term" : {
                    "查询条件e" : {
                      "value" : "值e",
                      "boost" : 1.0
                    }
                  }
                }
              ],
              "disable_coord" : false,
              "adjust_pure_negative" : true,
              "boost" : 1.0
            }
          }
        ],
        "disable_coord" : false,
        "adjust_pure_negative" : true,
        "minimum_should_match" : "1",
        "boost" : 1.0
      }
    }
    

    对应的java代码如下:

        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
        boolQuery.filter(QueryBuilders.termsQuery("查询条件a", "值a"));
        boolQuery.should(QueryBuilders.boolQuery().must(QueryBuilders.termsQuery("查询条件b", "值b"))
                .must(QueryBuilders.termQuery("查询条件c", "值c")))
                .should(QueryBuilders.boolQuery().must(QueryBuilders.termsQuery("查询条件d", "值d"))
                        .must(QueryBuilders.termQuery("查询条件e", "值e")))
                .minimumShouldMatch(1);
        System.out.println(boolQuery);
    

    小技巧: 直接写dsl,会比较麻烦,用代码去把dsl打印出来,会方便很多。

    参考资料

    http://events.jianshu.io/p/84789dd89dcf
    https://blog.csdn.net/qq_31748587/article/details/101449613

  • 相关阅读:
    团队第二次作业
    重载和多态
    团队第一次作业
    结对编程
    java处理数字字符串每5个数字为一组进行拆分,保留逗号。不足5个的也存为一组。
    POI & easyExcel快速使用
    Access denied for user 'root'@'localhost' (using password: YES) 解决方法
    快速理解 并发,并行,同步,异步
    Spring Tools Suite 安装于基本使用
    Mysql 数据备份与恢复
  • 原文地址:https://www.cnblogs.com/expiator/p/15339521.html
Copyright © 2020-2023  润新知