nested
请教一个计算平均差值的问题
Elasticsearch • God_lockin 回复了问题 • 3 人关注 • 3 个回复 • 3610 次浏览 • 2024-01-02 10:13
es局部更新文档字段
Elasticsearch • duanxiaobiao 回复了问题 • 2 人关注 • 1 个回复 • 5557 次浏览 • 2023-04-02 15:39
求助:nestde嵌套实现类似not exist的效果
Elasticsearch • FFFrp 回复了问题 • 2 人关注 • 1 个回复 • 5272 次浏览 • 2023-02-02 10:42
多层nested的多条件查询
Elasticsearch • duanxiaobiao 回复了问题 • 2 人关注 • 1 个回复 • 1739 次浏览 • 2022-05-17 23:19
6.X版本中java实体FieldType.Nested映射不生效的问题
Elasticsearch • nofearinmyheat 回复了问题 • 2 人关注 • 1 个回复 • 3511 次浏览 • 2021-11-13 11:42
求助,搜索时由于逆文档频率,匹配到更多分词的文档没有被放在最前面
Elasticsearch • CurryQin 回复了问题 • 2 人关注 • 1 个回复 • 1573 次浏览 • 2021-08-09 17:18
nested查询只取内部的第一条或者指定的条数
Elasticsearch • wangwei2021 回复了问题 • 4 人关注 • 3 个回复 • 4153 次浏览 • 2021-04-17 16:20
elasticsearch nested 是怎么查询 符合条件的的子文档数 最少x个的需求的
Elasticsearch • pony_maggie 回复了问题 • 2 人关注 • 1 个回复 • 2763 次浏览 • 2020-09-03 09:24
一种处理Elasticsearch对象数组类型的方式
Elasticsearch • trycatchfinal 发表了文章 • 0 个评论 • 7301 次浏览 • 2020-03-10 20:27
目前情况
Elasticsearch中处理对象数组有两种格式array和nested,但这两种都有一定的不足。
以下面的文档为例:
{
"user": [
{
"first": "John",
"last": "Smith"
},
{
"first": "Alice",
"last": "White"
}
]
}
如果在mapping中以array存储,那么实际存储为:
user.first:["John","Alice"]
user.last:["Smith","White"]
如果以must的方式查询user.first:John
和user.last:White
,那么这篇文档也会命中,这不是我们期望的。
如果在mapping中以array存储,Elasticsearch将每个对象视为一个doc,这例子会存储3个doc,会严重影响ES写入和查询的效率。
Flatten格式
我想到的存储方式很简单,就是将对象数组打平保存为一个keyword
类型的字符串数组,故起名Flatten格式。
以上面文档为例,数组对象需要转换为下面的格式
"user.flatten": [
"first:John",
"last:Smith",
"first:John&last:Smith",
"first:Alice",
"last:White",
"first:Alice&last:White"
]
这样以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
方式保存,例如:
{
"first": "John",
"last": null
}
转换后的格式
[
"first:John",
"last:null",
"first:John&last:null",
]
保存和查询对于对象属性的处理顺序要保持一致
上述例子都是按first&last
顺序存储的,那么以must的方式查询user.first:John
和user.last:White
也要以first:John&last:White
方式查询,不能用last:White&first:John
。
不足
- 需要自己编码将JSON对象转换为字符串数组
- 需要自己编码转换查询语句
- 只支持term查询
elasticsearch-rest-client 能使用nested吗?
Elasticsearch • God_lockin 回复了问题 • 4 人关注 • 3 个回复 • 1911 次浏览 • 2019-12-23 18:28
请问NESTED查询,如何实现not exists逻辑
回复Elasticsearch • envy666 回复了问题 • 1 人关注 • 1 个回复 • 3264 次浏览 • 2019-10-08 15:14
Elasticsearch Nested根据满足条数计算子项的分
Elasticsearch • laoyang360 回复了问题 • 4 人关注 • 1 个回复 • 3805 次浏览 • 2019-04-25 21:10
Nested嵌套的index 怎么导数据?
Elasticsearch • laoyang360 回复了问题 • 3 人关注 • 1 个回复 • 2127 次浏览 • 2018-11-19 20:48
求助:nestde嵌套实现类似not exist的效果
回复Elasticsearch • FFFrp 回复了问题 • 2 人关注 • 1 个回复 • 5272 次浏览 • 2023-02-02 10:42
6.X版本中java实体FieldType.Nested映射不生效的问题
回复Elasticsearch • nofearinmyheat 回复了问题 • 2 人关注 • 1 个回复 • 3511 次浏览 • 2021-11-13 11:42
求助,搜索时由于逆文档频率,匹配到更多分词的文档没有被放在最前面
回复Elasticsearch • CurryQin 回复了问题 • 2 人关注 • 1 个回复 • 1573 次浏览 • 2021-08-09 17:18
nested查询只取内部的第一条或者指定的条数
回复Elasticsearch • wangwei2021 回复了问题 • 4 人关注 • 3 个回复 • 4153 次浏览 • 2021-04-17 16:20
elasticsearch nested 是怎么查询 符合条件的的子文档数 最少x个的需求的
回复Elasticsearch • pony_maggie 回复了问题 • 2 人关注 • 1 个回复 • 2763 次浏览 • 2020-09-03 09:24
elasticsearch-rest-client 能使用nested吗?
回复Elasticsearch • God_lockin 回复了问题 • 4 人关注 • 3 个回复 • 1911 次浏览 • 2019-12-23 18:28
请问NESTED查询,如何实现not exists逻辑
回复Elasticsearch • envy666 回复了问题 • 1 人关注 • 1 个回复 • 3264 次浏览 • 2019-10-08 15:14
Elasticsearch Nested根据满足条数计算子项的分
回复Elasticsearch • laoyang360 回复了问题 • 4 人关注 • 1 个回复 • 3805 次浏览 • 2019-04-25 21:10
Nested嵌套的index 怎么导数据?
回复Elasticsearch • laoyang360 回复了问题 • 3 人关注 • 1 个回复 • 2127 次浏览 • 2018-11-19 20:48
一种处理Elasticsearch对象数组类型的方式
Elasticsearch • trycatchfinal 发表了文章 • 0 个评论 • 7301 次浏览 • 2020-03-10 20:27
目前情况
Elasticsearch中处理对象数组有两种格式array和nested,但这两种都有一定的不足。
以下面的文档为例:
{
"user": [
{
"first": "John",
"last": "Smith"
},
{
"first": "Alice",
"last": "White"
}
]
}
如果在mapping中以array存储,那么实际存储为:
user.first:["John","Alice"]
user.last:["Smith","White"]
如果以must的方式查询user.first:John
和user.last:White
,那么这篇文档也会命中,这不是我们期望的。
如果在mapping中以array存储,Elasticsearch将每个对象视为一个doc,这例子会存储3个doc,会严重影响ES写入和查询的效率。
Flatten格式
我想到的存储方式很简单,就是将对象数组打平保存为一个keyword
类型的字符串数组,故起名Flatten格式。
以上面文档为例,数组对象需要转换为下面的格式
"user.flatten": [
"first:John",
"last:Smith",
"first:John&last:Smith",
"first:Alice",
"last:White",
"first:Alice&last:White"
]
这样以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
方式保存,例如:
{
"first": "John",
"last": null
}
转换后的格式
[
"first:John",
"last:null",
"first:John&last:null",
]
保存和查询对于对象属性的处理顺序要保持一致
上述例子都是按first&last
顺序存储的,那么以must的方式查询user.first:John
和user.last:White
也要以first:John&last:White
方式查询,不能用last:White&first:John
。
不足
- 需要自己编码将JSON对象转换为字符串数组
- 需要自己编码转换查询语句
- 只支持term查询