ES 错误更新字段【字段类型不匹配】
Elasticsearch • zqc0512 回复了问题 • 4 人关注 • 3 个回复 • 4841 次浏览 • 2020-03-18 09:22
一种处理Elasticsearch对象数组类型的方式
Elasticsearch • trycatchfinal 发表了文章 • 0 个评论 • 7707 次浏览 • 2020-03-10 20:27
目前情况
Elasticsearch中处理对象数组有两种格式array和nested,但这两种都有一定的不足。
以下面的文档为例:
<br /> {<br /> "user": [<br /> {<br /> "first": "John",<br /> "last": "Smith"<br /> },<br /> {<br /> "first": "Alice",<br /> "last": "White"<br /> }<br /> ]<br /> }<br />
如果在mapping中以array存储,那么实际存储为:
<br /> user.first:["John","Alice"]<br /> user.last:["Smith","White"]<br />
如果以must的方式查询user.first:John
和user.last:White
,那么这篇文档也会命中,这不是我们期望的。
如果在mapping中以array存储,Elasticsearch将每个对象视为一个doc,这例子会存储3个doc,会严重影响ES写入和查询的效率。
Flatten格式
我想到的存储方式很简单,就是将对象数组打平保存为一个keyword
类型的字符串数组,故起名Flatten格式。
以上面文档为例,数组对象需要转换为下面的格式
<br /> "user.flatten": [<br /> "first:John",<br /> "last:Smith",<br /> "first:John&last:Smith",<br /> "first:Alice",<br /> "last:White",<br /> "first:Alice&last:White"<br /> ]<br /> <br />
这样以must的方式查询user.first:John
和user.last:White
,可以转换为term查询first:John&last:White
,并不会命中文档。
同时,这种方式还是保存1个doc,避免了nested的缺点。
对于flatten格式有几点说明
user.flatten数组的大小
如果user对象个数为M,user属性个数为N,那么其数组大小为(2^N-1)*M
。
对象为空怎么处理
建议以null
方式保存,例如:
<br /> {<br /> "first": "John",<br /> "last": null<br /> }<br />
转换后的格式
<br /> [<br /> "first:John",<br /> "last:null",<br /> "first:John&last:null",<br /> ]<br />
保存和查询对于对象属性的处理顺序要保持一致
上述例子都是按first&last
顺序存储的,那么以must的方式查询user.first:John
和user.last:White
也要以first:John&last:White
方式查询,不能用last:White&first:John
。
不足
- 需要自己编码将JSON对象转换为字符串数组
- 需要自己编码转换查询语句
- 只支持term查询
社区日报 第877期 (2020-03-10)
社区日报 • kimichen123 发表了文章 • 0 个评论 • 2050 次浏览 • 2020-03-10 19:21
http://t.cn/A673xv8b
2、打开ElasticSearch、kibana、logstash的正确方式。
http://t.cn/A6z2U2px
3、在docker环境中部署Elasticsearch集群。
http://t.cn/A6z2UyIs
编辑:叮咚光军
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
[招聘]互联网教育大厂诚招Elasticsearch中高级运维工程师-起薪 20~40K工作地点北京
回复求职招聘 • jagjag 发起了问题 • 1 人关注 • 0 个回复 • 3495 次浏览 • 2020-03-10 14:17
Solutions:网站搜索 - Elastic Site Search
回复Elasticsearch • liuxg 发起了问题 • 1 人关注 • 0 个回复 • 1493 次浏览 • 2020-03-10 14:10
java 调用.startScroll(),为什么无法排序,求解啊
Elasticsearch • laoyang360 回复了问题 • 2 人关注 • 1 个回复 • 1791 次浏览 • 2020-03-12 13:02
$("#tag").val(previous + "," + data);
回复Elasticsearch • rlkb63569 发起了问题 • 0 人关注 • 0 个回复 • 1754 次浏览 • 2020-03-09 20:06
ES7.X压缩索引体积的方法还有哪些
Elasticsearch • byx313 回复了问题 • 2 人关注 • 1 个回复 • 1606 次浏览 • 2020-03-15 22:59
社区日报 第876期 (2020-03-09)
社区日报 • cyberdak 发表了文章 • 0 个评论 • 1404 次浏览 • 2020-03-09 13:40
http://t.cn/A67sslcO
2、记一次ElasticSearch 集群灾难恢复
http://t.cn/EAlk7Et
3、为什么开发人员应该关心es的cluster state?
http://t.cn/A6zvh4Yk
编辑:cyberdak
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
logstash jdbc 导入时 unsigned 类型数据导入ES出错
回复Logstash • s60514 回复了问题 • 1 人关注 • 1 个回复 • 2062 次浏览 • 2020-03-09 17:58
社区日报 第875期 (2020-03-08)
社区日报 • 至尊宝 发表了文章 • 0 个评论 • 1319 次浏览 • 2020-03-08 22:25
http://t.cn/A67DPpga
2.如何使用Node,Vue和ElasticSearch构建实时搜索引擎。
http://t.cn/A67DhWIj
3.(自备梯子)了解为什么以太坊存在,并且您会明白为什么这很重要。
http://t.cn/A67D7Z3o
编辑:至尊宝
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
elasticsearch-plagin 安装ik报错
Elasticsearch • medcl 回复了问题 • 2 人关注 • 2 个回复 • 2150 次浏览 • 2020-03-09 15:30
logstash 写ES 报错【400 Encountered a retryable error. Will Retry with exponential backoff】
回复Elasticsearch • juin 回复了问题 • 1 人关注 • 1 个回复 • 7299 次浏览 • 2020-03-08 20:21
elasticsearch totalhits过高影响性能问题
Elasticsearch • byx313 回复了问题 • 2 人关注 • 1 个回复 • 3096 次浏览 • 2020-03-15 23:01