如何使用术语查询在此数组中进行搜索?

How can I use a Term Query to search within this array?

我有一个索引,我的文档的某些属性可以是数组值 ID,即

POST temp/_doc
{
  "test": ["5T8QLHIBB_kDC9Ugho68","5T8QLHIBB_kDC9Ugho69"]
}

现在,当我想搜索包含某个 ID 的文档时,term query 像这样:

POST temp/_search
{
  "query": {
    "term": {
      "test": "5T8QLHIBB_kDC9Ugho68"
    }
  }
}

没有结果。如果我尝试使用更简单的值(例如“foo”和“bar”而不是 ID),它会起作用。我该如何解决?

在这种情况下,指示 Elasticsearch 使用字段的关键字部分有效:

POST temp/_search
{
  "query": {
    "term": {
      "test.keyword": "5T8QLHIBB_kDC9Ugho68"
    }
  }
}

一击。

我本可以通过像这样预先指定映射来避免这种情况,而不是让 Elasticsearch 根据我发布的文档来猜测它;默认情况下,它将使用文本字段而不是关键字。

POST temp/_mapping
{
  "properties": {
    "test": {
      "type": "keyword"
    }
  }
}

我想在您的回答中补充一点,字符串 hey5T8QLHIBB_kDC9Ugho68 之间没有 'complexity' 区别——它们得到的分析是一样的。

至于一开始可能会混淆的数组方面——在 ES 中有 no dedicated array 数据类型。您应该将数组值的映射定义为字符串(或关键字)。

旁注:建议不要在一个特定数组中混合使用不同的类型——但您可以使用 ["5T8QLHIBB_kDC9Ugho68", "5T8QLHIBB_kDC9Ugho69"]