0

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

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

预期:如果我将“Hello World”存储在一个数组中,我应该能够搜索“Hello World”。

当前行为:它以不同的方式存储 hello 和以不同的方式存储世界,因为它标记了它。

4

1 回答 1

1

弹性搜索中没有数组的数据类型。每当您将数组作为x类型的属性的值发送时,该属性就会成为仅接受x类型的值的数组。

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

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

并且您索引具有如下值的文档:

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

然后tagIds自动变成一个整数数组。

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

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

索引文件:

PUT test/_doc/1
{    
    "name" : ["name one"]
}
于 2019-01-30T04:03:49.457 回答