向elasticsearch中动态添加字段报错问题和向elasticsearch中添加嵌套数据类型数据--工作学习记录

Posted olzoooo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了向elasticsearch中动态添加字段报错问题和向elasticsearch中添加嵌套数据类型数据--工作学习记录相关的知识,希望对你有一定的参考价值。

今天在对已有的es库中进行update操作时发现update操作失败(提示说是操作不允许)。然后发现原因是:es中type的“dynamic”属性为“strict”

然后感觉有两种方法解决:

1.向type中新增字段,再动态添加

2.修改es中dynamic属性为true(这种的话改动太大就算了)

之后我就通过第一种方法进行解决。但是,要添加的数据类型是嵌套数据类型。

如果就像普通的数据那样进行添加的话,es引擎内部会把对象数组展开成扁平的数据结构,数据之间的依赖关系会丢失。

 

例如:"tag":[

            

               "tagname":"测试标签1",

               "userid":"admin1"

            

           

              "tagname":"测试标签2",

              "userid":"admin2"

            

       ]

像这样添加数据后es会解析成 

                                                   "tag.tagname":["测试标签1","测试标签2"],

                                                   "tag.userid":["admin1","admin2"]

                                                

这样的话admin1添加的标签虽然是"测试标签1",但是经过es这么一解析,我们就不能通过admin1来查出他所添加的标签了。

 

为了解决这个问题,在添加该对象数组的时候就把它设置成嵌套类型。具体操作如下:

PUT /indextest/_mapping/typetest

  "typetest":

       "properties":

             "tag":

                "type":"nested",

                 "properties":

      "userid":"type": "text",

      "tagname":"type": "text"

                 

            

        

  

 

以上是关于向elasticsearch中动态添加字段报错问题和向elasticsearch中添加嵌套数据类型数据--工作学习记录的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch 8.X 如何动态的为正文添加摘要字段?

Elasticsearch 8.X 如何动态的为正文添加摘要字段?

Elasticsearch 8.X 如何动态的为正文添加摘要字段?

ElasticSearch之动态映射和模板

CakePHP:向表单添加字段(动态)

ElasticSearch之动态映射和模板