我这边有一个业务用的ES,索引是按天后缀创建,每天的数据有5亿条,大部分查询是这样的:
{
"size": 10,
"query": {
"bool": {
"filter": [
{
"range": {
"create_time": {
"gte": "2022-01-04T08:00:00.000Z",
"lte": "2022-01-04T10:00:00.000Z"
}
}
}
]
}
},
"sort": [
{
"create_time": {
"order": "desc"
}
}
]
}
按照默认的设置这个查询比较慢,需要十几到几十秒,后来给索引设置了写入时排序index sorting,索引setting增加了如下设置
"index": {
"sort": {
"field": "create_time",
"order": "desc"
}
}
文档在写入时按create_time排序,效果很明显,查询基本都是瞬时返回。
但目前有一个问题,就是对于当天正在有写入的索引(refresh_interval为默认的1s),即使不加任何条件,只是调一次_search接口,都需要几十秒才返回。只有停止写入,或者将refresh_interval设置成比较大的值以后,才会正常。
查询里加profile:true参数,对当天慢的索引,和之前那些很快的索引做查询,得到的结果基本是一样的,所以现在也没办法确认这个慢实际是哪边导致的。
这个情况正常吗,会是哪边导致的慢呢,有办法优化吗?
{
"size": 10,
"query": {
"bool": {
"filter": [
{
"range": {
"create_time": {
"gte": "2022-01-04T08:00:00.000Z",
"lte": "2022-01-04T10:00:00.000Z"
}
}
}
]
}
},
"sort": [
{
"create_time": {
"order": "desc"
}
}
]
}
按照默认的设置这个查询比较慢,需要十几到几十秒,后来给索引设置了写入时排序index sorting,索引setting增加了如下设置
"index": {
"sort": {
"field": "create_time",
"order": "desc"
}
}
文档在写入时按create_time排序,效果很明显,查询基本都是瞬时返回。
但目前有一个问题,就是对于当天正在有写入的索引(refresh_interval为默认的1s),即使不加任何条件,只是调一次_search接口,都需要几十秒才返回。只有停止写入,或者将refresh_interval设置成比较大的值以后,才会正常。
查询里加profile:true参数,对当天慢的索引,和之前那些很快的索引做查询,得到的结果基本是一样的,所以现在也没办法确认这个慢实际是哪边导致的。
这个情况正常吗,会是哪边导致的慢呢,有办法优化吗?
1 个回复
God_lockin
赞同来自: