如何在elasticsearch中将字段类型从字符串更新为字符串数组?

66bbxpm5  于 11个月前  发布在  ElasticSearch
关注(0)|答案(3)|浏览(200)

我有一个索引,用这个模式填充数据:

{
    "name" : "string",
    "book": "string"
}

字符串
我正在使用ElasticSearch与Nest和C#。现在,由于业务需求,book字段必须是一个数组,我更新了我的查询模型C# POCO类,但当我运行我的查询时,我得到了这个错误:
预期值:“[”,实际值:“”test“”,偏移量:2248
现在我想更新我的schema以将book转换为数组类型。我尝试使用脚本和Map,但找不到好的解决方案?在ElasticSearch中有没有工作方法来执行此更改?

wgmfuz8q

wgmfuz8q1#

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":{}
  }
}

字符串

1dkrff03

1dkrff032#

您不能更新或更改已创建的索引的Map(架构)中的字段类型。
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-put-mapping.html#updating-field-mappings
如果需要更改类型,则应创建新索引并使用Reindex API。

yzuktlbb

yzuktlbb3#

为了补充纳扎尔的回答
依赖于Elasticsearch的官方文档,ES中没有专门的数组数据类型,所以你不需要改变Map,你只需要给那个字段给予一个数组值。
参考号:https://www.elastic.co/guide/en/elasticsearch/reference/current/array.html

相关问题