求助:OpenSearch数组使用及与Elasticsearch映射显示差异问题
问题排查与解决方法
你遇到的核心问题大概率是写入的数据结构不符合nested类型的要求,而非映射配置本身的问题。以下是具体的排查和解决步骤:
确保写入的
szemelyek字段是数组形式的对象
nested类型要求字段值必须是数组,哪怕只有一个对象。如果写入的是单个对象(比如{"szemelyek": {"szam":1, "nev":"test"}}),OpenSearch依然会将其扁平化存储,表现为字段被拆分,此时nested配置不会生效。正确的写入格式应该是:PUT test/_doc/1 { "szemelyek": [ {"szam": 1, "nev": "张三"}, {"szam": 2, "nev": "李四"} ] }验证文档的实际存储结构
执行以下命令查看已写入文档的真实结构,确认szemelyek是否为数组:GET test/_doc/1如果返回结果中
szemelyek不是数组,说明写入时的结构错误,需要修正数据格式。检查版本兼容性
OpenSearch从Elasticsearch分叉而来,部分小版本可能存在细微的行为差异。确保你使用的OpenSearch版本与目标Elasticsearch版本大版本对齐(比如ES 7.x对应OpenSearch 1.x,ES 8.x对应OpenSearch 2.x),避免版本差异导致的处理逻辑不同。关闭动态映射避免干扰
如果索引开启了动态映射,可能会自动生成额外的字段,导致显示差异。可以设置dynamic: strict关闭动态映射,确保只有手动配置的字段生效:PUT test { "mappings": { "dynamic": "strict", "properties": { "szemelyek": { "type": "nested", "properties": { "szam": { "type": "integer" }, "nev": { "type": "text" } } } } } }
内容的提问来源于stack exchange,提问作者kisscsaba
相关产品推荐
相关产品推荐

