有没有办法在 ElasticSearch Array 数据类型中将属性类型定义为关键字?

Is there a way to define attribute type as Keyword in ElasticSearch Array data type?

我正在为一个大型数据集编制索引,该数据集具有特定实体的多个名称字段。我已经定义了类型数组的名称字段,并在其中添加了大约 4 个名称。一些名称之间有空格,并且它们正在被标记化。我可以避免吗?

我知道对于字符串,我们在 Elastic 中有文本和关键字类型,但是当我将数组作为我的数据类型时,如何将类型定义为关键字?默认情况下,所有数组字段都被视为文本类型。我希望它们被视为关键字类型,这样它们在索引时就不会被标记化。

预期:如果我将 "Hello World" 存储在数组中,我应该能够搜索 "Hello World".

当前行为:它以不同的方式存储 hello 和 world,因为它对其进行标记化。

弹性搜索中没有数组的数据类型。每当你发送一个数组作为 x 类型的 属性 的值时,那么 属性 就变成一个只接受 x[ 类型的值的数组=31=].

例如,您创建了一个 属性,如下所示:

{
   "tagIds": {
      "type": "integer"
   }
}

并且您使用以下值索引文档:

{
   "tagIds": [124, 452, 234]
}

那么tagIds自动变成整数数组

对于您的情况,您需要做的就是创建一个字段 name,类型为 keyword。并确保始终将一个数组传递给该字段,即使它必须保存单个值以确保它始终是一个数组。以下是您需要的: 映射:

PUT test
{
  "mappings": {
    "_doc": {
      "properties": {
        "name": {
          "type": "keyword"
        }
      }
    }
  }
}

索引文档:

PUT test/_doc/1
{    
    "name" : ["name one"]
}