我使用以下设置和映射创建了索引:
PUT test
{
"settings": {
"number_of_shards": 2,
"number_of_replicas": 1
},
"mappings": {
"documents": {
"properties": {
"title": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
},
"url": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
},
"tags": {
"type": "keyword"
}
}
}
}
}
在上面的映射中,我已将标签声明为完全匹配的type关键字,并在其中添加了10个文档,例如:
PUT test/documents/1
{
"title":"John",
"url":"/john",
"tags":["name question","how"]
}
但是我想为标签添加多字段支持,以支持部分标签匹配,因此我更新了索引映射,如下所示:
PUT test/documents/_mapping
{
"properties": {
"title": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
},
"url": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
},
"tags": {
"type": "keyword",
"fields": {
"raw": {
"type": "text"
}
}
}
}
}
这是更新索引映射的正确方法吗?现在我的标签可以支持部分匹配了吗? 请帮助我
答案 0 :(得分:3)
是的。这就是更新该字段的方法。尽管我不使用raw
作为子字段的名称。将raw
作为text
类型并不常见。
例如,我将其命名为fulltext
。
无论如何,即使您更新了映射,也必须重新索引所有文档。
Update by Query将执行以下操作:
curl -X POST "localhost:9200/test/_update_by_query?conflicts=proceed"
顺便说一句(与您的问题无关),我将使用_doc
作为类型名称,以便您将来为删除类型做更多的准备。