当前位置: 首页 > 面试题库 >

minimum_should_match的默认值?

云骏奇
2023-03-14
问题内容

无法找到minimum_should_match文档中的默认值

https://www.elastic.co/guide/zh-CN/elasticsearch/reference/current/query-dsl-
minimum-should-
match.html

0还是1,还是取决于查询是否具有正义shouldfilter上下文?


问题答案:

默认值minimum_should_match取决于查询和上下文:

  • 1:在查询上下文中且should单独存在(否mustfilter
  • 1:在过滤器上下文中(例如filter,在bool查询的一部分内部;在ES 6.7之前为true)
  • 0:在过滤器上下文中(例如filter,在bool查询的一部分内部;自ES 7.0起为true,请参见下面的注释)
  • 0:在查询上下文中,有mustand should(或filterand should

可以在bool查询文档中找到:

如果布尔查询位于查询上下文中,并且具有must或filter子句,则文档将与布尔查询匹配,即使没有应当匹配的查询。在这种情况下,这些子句仅用于影响得分。如果布尔查询是一个过滤器上下文,或者既没有必须查询也没有过滤器,则应该查询中的至少一个必须与文档匹配才能使其与布尔查询匹配。可以通过设置minimum_should_match参数来明确控制此行为。

一些例子

查询上下文,并且should是单独的:

POST _search
{
  "query": {
    "bool" : {
      "should" : [
        { "term" : { "tag" : "wow" } },
        { "term" : { "tag" : "elasticsearch" } }
      ]
      # default:
      # "minimum_should_match" : 1
    }
  }
}

查询上下文,must并与should

POST _search
{
  "query": {
    "bool" : {
      "must" : {
        "term" : { "user" : "kimchy" }
      },
      "should" : [
        { "term" : { "tag" : "wow" } },
        { "term" : { "tag" : "elasticsearch" } }
      ]
      # default:
      # "minimum_should_match" : 0
    }
  }
}

过滤器上下文:

POST _search
{
  "query": {
    "bool": {
      "filter": {
        "bool": {
          "must": {
            "term" : { "user" : "kimchy" }
          },
          "should": [
            { "term" : { "tag" : "wow" } },
            { "term" : { "tag" : "elasticsearch" } }
          ]
          # default (until ES 6.7):
          # "minimum_should_match" : 1
        }
      }
    }
  }
}

更新:与ES 7.0相关的更改

在Elasticsearch
7.0中,过滤器上下文已被删除,这实际上意味着在过滤器上下文中其默认值现在为0



 类似资料:
  • 注:内容翻译自官网文档 Language Guide (proto3) 中的 Default Values 一节 当消息被解析时, 如果被编码的消息没有包含特定的简单元素, 被解析的对象对应的字段被设置为默认值. 默认值是和类型有关的: 对于strings, 默认值是空字符串(注, 是"", 而不是null) 对于bytes, 默认值是空字节(注, 应该是byte[0], 注意这里也不是null)

  • 我是Java初学者,我正在尝试创建一个ArrayList来存储包含整数的ArrayList。我已经知道外部ArrayList的大小,并希望存储内部ArrayList。例如,我希望将所有狗的ID号添加到存储在外部ArrayList第一个索引中的ArrayList中,猫的ID号添加到第二个索引中,蜥蜴的ID号添加到第三个索引中。这将以随机的顺序发生,所以我希望外部ArrayList已经初始化了它的大小

  • 来自nginx。org,keepalive config的默认值是-,但我不太明白这意味着什么。

  • 问题内容: 众所周知,根据JLS7 p.4.12.5, 每个实例变量均使用默认值初始化。例如(1): 但是我一直认为,这样的类实现(2): 绝对等于示例(1)。我期望,复杂的Java编译器会看到(2)中的所有这些初始化值都是多余的,并忽略了它们。 但是突然对于这两个类,我们有两个不同的字节码。 例如(1): 例如(2): 问题是: 为什么?但这是显而易见的要优化的事情。什么原因? UPD: 我使用

  • 主要内容:在创建表时设置默认值约束,在修改表时添加默认值约束,删除默认值约束默认值(Default)的完整称呼是“默认值约束(Default Constraint)”,用来指定某列的默认值。在表中插入一条新记录时,如果没有为某个字段赋值,系统就会自动为这个字段插入默认值。 例如,员工信息表中,部门位置在北京的较多,那么部门位置就可以默认为“北京”,系统就会自动为这个字段赋值为“北京”。 默认值约束通常用在已经设置了非空约束的列,这样能够防止数据表在录入数据时出现错误。 在

  • 我正在开发一个JPA应用程序,并且我正在使用eclipse链接提供程序。 我有一个表T1,其中有一个字段F1定义为非null,并且有一个默认值(“U”)。 我已经定义了一个映射到表T1的实体。该实体有一个映射到字段F1的属性,我已经用注释@ReturnInsert(returnOnly=true)配置了该属性。 文件说明: 使用@返回插入使INSERT操作将值返回到正在写入的对象中 如果在映射到F