我正在为大型数据集建立索引,该数据集具有特定实体的多个名称字段。我已经定义了类型数组的名称字段,并在其中添加了大约4个名称。其中一些名称之间有空格,并且它们已被标记化。我可以避免吗?
我知道对于String我们在Elastic中既有文本又有关键字类型,但是当我将数组作为数据类型时如何将类型定义为关键字?默认情况下,所有数组字段均作为文本类型。我希望将它们视为关键字类型,以使它们在编制索引时不会被标记化。
预期:如果我将“ Hello World”存储在数组中,则应该可以搜索“ Hello World”。
当前行为:令牌化时,它存储的Hello和World都不一样。
答案 0 :(得分:1)
弹性搜索中没有数组的数据类型。每当您将数组作为 x 类型的属性的值发送时,该属性就会变成仅接受 x 类型的值的数组。
例如,您创建了一个如下属性:
{
"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"]
}