是时候用 ES 拯救发际线啦

_source字段的存储对搜索聚合的影响

Elasticsearch | 作者 lixin | 发布于2021年10月12日 | 阅读数:196

使用的是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。
qlx_2021-10-12_16-30-26.png

qlx_2021-10-12_16-28-56.png

自己进行了简单的搜索,搜索的_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,结果大差不差)
qlx_2021-10-12_16-38-18.png

qlx_2021-10-12_16-38-40.png

聚合时倒是相差不大。
为了避免网络和路由的影响,在写这个问题时,将副本改为0,并在shard所在节点进行测试,结果一致。
 
有点想不明白,搜索的时候是对索引进行搜索,取数据也都没有取content数据,为什么搜索时间会有差异?
 
 
已邀请:

Charele

赞同来自:

对搜索没有影响。只是显示不了全文。
 
还有其他一些功能用不了,比如reindex。它需要原始内容。

tongchuan1992 - 学无止境、学以致用

赞同来自:

聚合因为指定了字段,所以时间上面没有差别。搜索如果不是全文搜索,检索时间是一样的。如果是全文检索,_source 排除了部分字段时间更快一点。

要回复问题请先登录注册