通过update-mapping更新child的field失败——NullPointerException

使用Elasticsearch时,需要用到parent-child API,建立parent的mapping后,动态更新child的field字段时,出现常见的NEP——NullPointerException。log日志异常如下:

[2016-04-01 12:04:53,986][INFO ][rest.suppressed          ] /test/_mapping/name/ Params: {index=test, type=name}
java.lang.NullPointerException
        at org.elasticsearch.index.mapper.MappedFieldType.checkCompatibility(MappedFieldType.java:246)
        at org.elasticsearch.index.mapper.internal.ParentFieldMapper.merge(ParentFieldMapper.java:391)
        at org.elasticsearch.index.mapper.Mapping.merge(Mapping.java:113)
        at org.elasticsearch.index.mapper.DocumentMapper.merge(DocumentMapper.java:396)
        at org.elasticsearch.cluster.metadata.MetaDataMappingService$2.execute(MetaDataMappingService.java:389)
        at org.elasticsearch.cluster.service.InternalClusterService$UpdateTask.run(InternalClusterService.java:388)
        at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:231)
        at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:194)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)

head插件显示内容如下:

"error": {
"root_cause": [
{
"type": "null_pointer_exception",
"reason": null
}
],
"type": "null_pointer_exception",
"reason": null
},
"status": 500
}

执行的相关操作如下:

  1. 建立parent mapping

    curl -XPUT localhost:9200/test -d‘

    {

    "mappings":{

    "user":{

    "dynamic":true,

    "properties":{

    "id":{"type":"string"},

    "age":{"type":"string"},

    "gender":{"type":"string"}

    }

    },

    "name":{"_parent":{"type":"user"}}

    }

    }‘ 

  2. 更新child mapping

    curl -XPUT localhost:9200/test/_mapping/name -d‘

    {
     "name": {
       "properties": {
         "title": {
           "type": "string",
           "fields": {
             "first_name": {
               "type": "string"
             },
             "last_name": {
               "type": "long"
             }
           }
         }
       }
     }
    }‘

    使用中出现这个异常也是没谁了,查找相关文档以及官方说明,最后在git上找到线索,https://github.com/elastic/elasticsearch/issues/15997#issuecomment-171938807。有在ES中查到此问题说明,https://discuss.elastic.co/t/updating-child-mapping-with-new-field-fails-with-nullpointerexception/39256,最终这个问题在这篇文章中给了阐释,https://github.com/elastic/elasticsearch/pull/16013,原来这个问题是ES 2.1.x和2.0.x版本的bug,不过官方在2.2新版本后进行了修复,不过对于第一个链接提到的同此的_source问题,在2.3的官方文档的bug修复中才看到。所以问题的解决办法就是,升级ES到新的版本2.3。

时间: 2024-10-11 18:16:43

通过update-mapping更新child的field失败——NullPointerException的相关文章

security update 补丁更新失败

安装卡在了7月的某一个补丁 windows\windowsupdate.log  找到如下错误 2014-08-03 16:02:45:665 1284 2264 PT +++++++++++  PT: Synchronizing server updates  +++++++++++2014-08-03 16:02:45:665 1284 2264 PT  + ServiceId = {3DA21691-E39D-4DA6-8A4B-B43877BCB1B7}, Server URL = ht

Ubuntu 更新国内镜像源失败

Ubuntu 更新国内镜像源失败 首先打开系统原来的/etc/apt/sources.list 查看,原来的仓库地址是 https 还是 http 如果是http那么说明本机的 CA 证书有问题,运行命令sudo apt-get install apt-transport-https ca-certificates 更新,这样就可以使用国内的 htpps 镜像源 如果是http 那么也可以选择使用 http 的国内镜像源 运行 sudo apt-get update 来更新 原文地址:https

安装Visual Studio 2013 update 2 更新包记录和新功能简单体验

昨天下载了进4个小时,将visual studio 2013 update 2 更新包和visual studio 2013 完整安装包(包含UPDATE2)的下载完成,今天抽出时间体验一下,昨天在网上看了一下英文翻译的说明,增加了一些支持和改进,我只是针对于我所看到的来操作使用一下,看看有啥变化吧.将ISO文件加载到虚拟光驱,然后开始安装更新包,界面弹出后告诉我需要大概3个多G的硬盘空间,嗨真是大啊.点击安装开始继续安装,我截个图如下 剩下是就是等着安装完成了,整个安装过程还是比较慢的,安装的

mssql sql高效关联子查询的update 批量更新

/* 使用带关联子查询的Update更新     --1.创建测试表 create TABLE Table1     (     a varchar(10),     b varchar(10),     c varchar(10),     CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED     (     a ASC     )     ) ON [PRIMARY] create TABLE Table2     (     a varchar(10

Microsoft Update客户端更新

?? 大家好, 微软Microsoft Update产品组官方博客于昨天宣布了有关最新的Windows Update客户端更新的消息.根据这则博客,微软从当日开始逐渐向所有Windows 7, Windows Server 2008, Windows 8, Windows RT和Windows Server 2012用户推送新的Microsoft Update和Windows Update客户端.此项客户端更新的主要目的是加强MU/WU客户端的安全性,以及使MU/WU客户端与服务器的通讯更为安全

Windows 8.1 Update 2更新了什么?

Windows 8.1的第二个更新将于8月12日(周二补丁日)发布,官方命名是“8月更新”(August Update).但是之前我们已经知道Windows 8.1 Update 2不可能重新提供开始菜单,那么它究竟为大家带来了什么更新? 据知情人士透露,微软对于这个“8月更新”并不是十分重视,它并非累积性更新,只是包含一些小的设计改变,并没有重大的新功能.也就是说,这次的系统更新会带来界面上的改善,但也都是些细节处的变化. 微软原本的计划并非如此,Windows团队最初希望将它打造为另一个如同

利用带关联子查询Update语句更新数据

Update是T-sql中再简单不过的语句了,update table set column=expression  [where condition],我们都会用到.但update的用法不仅于此,真正在开发的时候,灵活恰当地使用update可以达到事半功倍的效果. 假定有表Table1(a,b,c)和Table2(a,c),现在Table1中有些记录字段c为null,要根据字段a在Table2中查找,取出字段a相等的字段c的值来更新Table1.一种常规的思路,通过游标遍历Table1中字段c

Windows 更新导致 VirtualBox 启动失败 VBoxDrvStub error

win8 导入virtualbox介质发生错误, NtCreateFile(\Device\VBoxDrvStub) failed: Unkown Status - 5600 (0xffffea20) (rcNt=0xe986ea20) VBoxDrvStub error: ntdll.dll: 7982 differences between 0x300c and 0x4fff in #1 (.text), first: 4c != 1f (rc=-5600) 尝试了各种办法,下载非最新版本v

C# DataAdapter.Update() 无法更新数据表中删除的数据行

用DataAdapter.Update() 方法更新删除了部分DataRow 的 DataTable .但是数据库中的数据没有随着更新而变化. 原因:DataTable 删除 DataRow 时,使用的是DataTable.Rows.Remove(DataRow ) 或 DataTable.Rows.RemoveAt(DataRowIndex) 方法. 解决方法:使用 DataTable.Rows[rowIndex].Delete() ; 方法删除数据. 详解如下: DataAdapter.Up