使用的是7.6.2版本
场景:数据在hbase中有存储,字段分布content占大头,还有一些filekey、city等10+个小字段。
考虑在es中_source不保存content原始数据,仅建立倒排索引用于搜索,可以节省大量磁盘空间。
问题:不保存content原始数据是否对搜索和聚合有影响?
自己进行了简单测试
1、新建两个索引,一个保存content原始字段,一个不保存content原始字段,其余settings和mapping都一致;
2、数据写入500w条5k的数据,一个shard,一个副本;
3、forceMerge后,不保存content原始字段的索引6.33g,保存的18.24g。
自己进行了简单的搜索,搜索的_source中排除content字段,保持_source内容一致。
聚合时倒是相差不大。
为了避免网络和路由的影响,在写这个问题时,将副本改为0,并在shard所在节点进行测试,结果一致。
有点想不明白,搜索的时候是对索引进行搜索,取数据也都没有取content数据,为什么搜索时间会有差异?
场景:数据在hbase中有存储,字段分布content占大头,还有一些filekey、city等10+个小字段。
考虑在es中_source不保存content原始数据,仅建立倒排索引用于搜索,可以节省大量磁盘空间。
问题:不保存content原始数据是否对搜索和聚合有影响?
自己进行了简单测试
1、新建两个索引,一个保存content原始字段,一个不保存content原始字段,其余settings和mapping都一致;
2、数据写入500w条5k的数据,一个shard,一个副本;
3、forceMerge后,不保存content原始字段的索引6.33g,保存的18.24g。
自己进行了简单的搜索,搜索的_source中排除content字段,保持_source内容一致。
{
"size" : 500,
"query" : {
"bool" : {
"must" : [
{
"bool" : {
"should" : [
{
"bool" : {
"must" : [
{
"multi_match" : {
"query" : "241.111",
"fields" : [
"s_ip^1.0"
],
"type" : "phrase",
"operator" : "OR",
"slop" : 0,
"prefix_length" : 0,
"max_expansions" : 50,
"lenient" : true,
"zero_terms_query" : "NONE",
"boost" : 1.0
}
}
],
"disable_coord" : false,
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
],
"disable_coord" : false,
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
],
"disable_coord" : false,
"adjust_pure_negative" : true,
"boost" : 1.0
}
},
"_source" : {
"includes" : [
#包含部分field,但是都不包含content
],
"excludes" : [ ]
},
"sort" : [
{
"insert_time" : {
"order" : "desc"
}
}
]
}
发现不保存content原始字段的搜索时间更短。(进行了多次,并修改了size,结果大差不差)聚合时倒是相差不大。
为了避免网络和路由的影响,在写这个问题时,将副本改为0,并在shard所在节点进行测试,结果一致。
有点想不明白,搜索的时候是对索引进行搜索,取数据也都没有取content数据,为什么搜索时间会有差异?
2 个回复
Charele - Cisco4321
赞同来自:
还有其他一些功能用不了,比如reindex。它需要原始内容。
tongchuan1992 - 学无止境、学以致用
赞同来自: