关于Elasticsearch中的字段值带dot(.)的处理

搜索与推荐Wiki
《推荐系统开发实战》作者
博客专家认证
2016-12-26 02:40:09
在Elasticsearch 5.0中,字段名称中允许使用点,路径中的每个步骤都被解释为对象字段,但最后一步除外。 例如,对Elasticsearch 5.0中的以下文档编制索引:
{
"server.latency.max": 100
}
映射应该这样写:
{
"properties": {
"server": {
"type": "object",
"properties": {
"latency": {
"type": "object",
"properties": {
"max": {
"type": "long"
}
}
}
}
}
}
}
Elasticsearch 2.x不支持此点到对象转换,因此在2.0 - 2.3版本中不允许字段名称中的点。

在字段namesedit中启用对点的支持
Elasticsearch 2.4.0添加了一个名为mapper.allow_dots_in_name的系统属性,它将禁用对字段名称中的点的检查。 您可以按如下所示启用此系统属性:
export ES_JAVA_OPTS="-Dmapper.allow_dots_in_name=true"
(如果您使用Debian软件包,则可以在/ etc / default / elasticsearch文件中设置ES_JAVA_OPTS,如果使用RPM,则可以在/ etc / sysconfig / elasticsearch文件中设置,我的是Ubuntu,使用的deb包安装的,编辑/etc/init.d/elasticsearch 加入上边一行,重新启动elasticsearch即可)。
这样设置之后你可以这样写:
{
"properties": {
"server.latency.max": {
"type": "long"
}
}
}
在1.x中创建的索引必须在升级到5.x之前在2.4中重新索引,而不管它们是否具有带点的字段。 或者,可以使用来自远程的索引将1.x集群中的索引直接导入5.x集群。
在2.4中创建的索引可以直接升级到5.x,只要没有冲突(见下文)。 如果字段名称中有点,则映射将自动更新为字段名称中的点中显示的对象样式映射。
测试2.4中字段带有小数点的效果:
curl -XPUT 'localhost:9200/my_index/my_type/4?pretty' -d'
{
"message": "no arrays in this document...",
"tags": "elasticsearch",
"lists": {
"name": "prog_list",
"desc.ription": "programming list"
}
}'

es中进行查看:
...全文
2220 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

4,451

社区成员

发帖
与我相关
我的任务
社区描述
云计算 云安全相关讨论
社区管理员
  • 云安全社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧