我有一个由具有此模式的数据填充的索引:
{
"name" : "string",
"book": "string"
}
我正在使用带有 Nest 和 C# 的 ElasticSearch。 现在,由于业务要求 book 字段必须是一个数组,我更新了我的查询模型 C# POCO 类,但是当我运行查询时,我收到此错误:
预期:'[',实际:'“测试”',偏移量:2248
现在我想更新我的架构以将书转换为数组类型。我尝试使用脚本和映射但找不到好的解决方案?有没有任何工作方法可以在 ElasticSearch 中执行此更改?
ES 内置了通过查询更新文档的功能 https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html.
如果上面的查询如下所示:
POST my-index-000001/_update_by_query
{
"script": {
"source": " ctx._source.book = [ctx._source.book] ",
"lang": "painless"
},
"query": {
"match_all":{}
}
}
您无法更新或更改已创建索引的映射(架构)中的字段类型。
如果您需要更改类型,您应该创建新索引并使用 Reindex API。
补充纳扎尔的答案
根据Elasticsearch的官方文档,ES中没有专用的数组数据类型,因此您不需要更改映射,只需为该字段赋予一个数组值即可。
这是参考: https://www.elastic.co/guide/en/elasticsearch/reference/current/array.html