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

Elasticsearch:如何使用两个不同的多个匹配字段?

车诚
2023-03-14
问题内容

我想做类似于“和”过滤器示例的操作,除了每个示例中都带有“应该”的术语,而不是示例中的字段类型。我提出以下内容:

    {
  "query": {
    "bool": {
      "must": [
        {
          "ids": {
            "type": "foo",
            "values": [
              "fff",
              "bar",
              "baz",
            ]
          }
        }
      ]
    }
  },
  "filter": {
    "and": {
      "filters": [
        {
          "bool": {
            "should": {
              "term": {
                "fruit": [
                  "orange",
                  "apple",
                  "pear",
                ]
              }
            },
            "minimum_should_match": 1
          }
        },
        {
          "bool": {
            "should": {
              "term": {
                "color": [
                  "red",
                  "yellow",
                  "green"
                ]
              }
            },
            "minimum_should_match": 1
          }
        }
      ]
    }
  }
}

但是,我收到此错误:

[bool] filter does not support [minimum_should_match];

还有另一种方法可以执行我正在尝试执行的操作,还是我走在正确的轨道上?还是在Elasticsearch中这是不可能的?


问题答案:

每个布尔查询子句可以包含多个子句。字词查询(http://www.elasticsearch.org/guide/reference/query-
dsl/terms-query/
)是一种指定查询应与任何字词列表匹配的简便方法。除了使用之前的ID查询,以下使用术语查询说水果必须是橙色,苹果,梨和颜色之一必须是红色,黄色,绿色之一。

{
  "query": {
    "bool": {
      "must": [
        {
          "ids": {
            "type": "foo",
            "values": [
              "fff",
              "bar",
              "baz"
            ]
          }
        },
        {
          "terms": {
            "fruit": [ "orange", "apple","pear" ],
            "minimum_should_match": 1
          }
        },
        {
          "terms": {
            "color": [ "red", "yellow", "green" ],
            "minimum_should_match": 1
          }
        }
      ]
    }
  }
}


 类似资料:
  • 尝试获取与字段ABC的值相匹配的文档。尝试了“必须”或“应该”查询,但未得到预期结果。有人能建议我应该尝试什么样的查询吗?使用HighLevelRestClient。 或 映射 条件工作正常。如果我只是反转条件并忽略字段值,那么我就会得到结果。 X1和Y1是精确的字段值(想想枚举) Still query返回所有文档。这应该已将文档筛选为匹配的值 样本文档

  • 尝试使用FTL模板进行转换时出现异常!freemarker.core.nonNumericalException:对于“-”左手操作数:需要一个数字,但它的计算结果是序列+散列(包装器:f.e.dom.nodelistmodel):==>item.target[在模板“marketing/widgets/freemarker/newblogpost-update.ftl”中,第31行,第105列]

  • 我有ES索引,其中包含以下格式的文档,这些文档使用Fluentd解析器从日志中解析,并在ES中索引。记录格式: {"id":"id1","field 1":"f1_val","消息":"XXXX","时间":"XXXX"} {"id":"id1","field 2":"f2_val","消息":"XXXX","时间":"XXXX"} {"id":"id1","field 3":"f3_val","

  • 本文向大家介绍Mybatis多个字段模糊匹配同一个值的案例,包括了Mybatis多个字段模糊匹配同一个值的案例的使用技巧和注意事项,需要的朋友参考一下 需求: 搜索框中可输入手机号,姓名,地址查询,后台需要对一个框中的多个字段做匹配查询。 搜索 可以在sql语句中做拼接条件查询: 补充知识:在Mybatis xml使用mysql数据库进行多字段模糊查询(Like) 在mysql中使用Like进行一

  • 问题内容: 我正在努力从我们的数据库中淘汰某个客户。我注意到一种趋势,人们用与他们填写公司名称相同的名字来填写名字。因此,示例如下所示: 这些人是我不想被查询的人。他们是坏蛋。我正在尝试将查询与WHERE语句(大概)组合在一起,以隔离姓氏至少与公司名称部分匹配的人,但是我很困惑,可以使用一些帮助。 问题答案: 您可以采用基于相似性的方法 在答案底部尝试代码 它会产生如下结果 因此,您将能够根据相似

  • 我有两个具有经度和纬度值的数据帧,我想从数据帧#2中提取值(例如数据帧#2的第三列),这些值与数据帧1的列匹配...例如,数据帧1有两列(、),数据帧2有三列(、和一些值)...我想在数据帧1中添加第三列,其中的值对应于两个数据帧中两列完全匹配的值,类似于和...在、不匹配的对中,我希望添加,以便第三列(我要添加到数据。帧1)的长度为=。我尝试了merge函数,但在将的两列与的列进行匹配时遇到了困