繁体   English   中英

获取 Elasticsearch 中字段值与任何数组元素匹配的所有文档

[英]Getting all documents in Elasticsearch where a field value matches any of array element

我想要做的是检索字段值与数组中的任何值匹配的所有文档。

所以从一个 id 数组: [id1, id2, id3, ..., idn] ,找到所有具有这些 id 的文档。

我目前可以通过在should内重复match来实现这一点,但这似乎不是正确的方法。

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "activityOwnerId": "id1"
          }
        },
        {
          "match": {
            "activityOwnerId": "id2"
          }
        },
        ... and so on
      ]
    }
  }
}

如何获取与数组中的元素之一匹配的所有文档?

编辑

使用 @Val 建议的terms查询不会在 Kibana 中返回任何结果:

使用Terms查询时没有结果: 没有条件的结果

找到的结果(具有相同的 id),使用时should 结果与 should 并列出每个 id

如果您正在查看完全匹配,则可以改用terms查询,它将数组作为输入:

{
  "query": {
    "terms": {
      "activityOwnerId.keyword": [id1, id2, id3, ..., idn]
    }
  }
}

在 elasicsearch 中有两种类型的查询

  1. 术语查询 - 搜索值中提到的确切术语
  2. 全文查询 - 首先通过映射字段​​中提到的分析器分析查询值

如果您想进行术语查询,那么@Val 提到的答案是完美的,

如果你想写一个全文查询,你可以使用这个

GET /_search
{
  "query": {
    "query_string": {
      "query": "activityOwnerId:(id1 OR id2 OR id3...)"
    }
  }
}

暂无
暂无

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

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