行动是治愈恐惧的良药,而犹豫、拖延将不断滋养恐惧。

亿量级的索引查询出现的慢查问题

Elasticsearch | 作者 yejiawei | 发布于2019年06月24日 | 阅读数:1899

您好,最近一个查询语句每天都出现几十次的慢查(公司设定的是1000ms为慢查),看了论坛里您的一些回复,也自己做了些优化,但是效果还是不好,所以还是想单独请教下您。 背景:es版本为5.2 这个索引的大小为2亿多条数据,有11个节点 5个分片 每个分片是1⃣️主2⃣️副 现在我的查询语句的range查询date_time的范围几乎是包含了所有的数据,平常自己查的话,在有缓存的基础上基本是几十ms,没有缓存第一次查应该是600-900ms。第一,索引里的数据量大,这是历史问题,现在推不动。
第二,我用profile 分析了下,最大问题是courseId的查询时间,这个字段用的是term查询,属性是 long,改成keyword会好些,但是更改或增加字段 工作量太大了。还有就是date_time的range查询时间很长
第三,datatime时间range范围太大,用了filter缓存,但是感觉没起很大作用,每天还是有慢查
第四,所有的查询条件都没有命中 routing字段,索引字段是teacherId
下面是查询语句,麻烦大神能帮我分析下能怎样减少查询时间。感谢!
{
"from": 0,
"size": 10,
"query": {
"bool": {
"must": [
{
"terms": {
"type": [
"SCHEDULED"
],
"boost": 1
}
},
{
"term": {
"student_id": {
"value": 123456,
"boost": 1
}
}
},
{
"terms": {
"course_id": [
12345,
23456
],
"boost": 1
}
}
],
"filter": [
{
"range": {
"date_time": {
"from": 1425288600000,
"to": 1561219199000,
"include_lower": true,
"include_upper": true,
"boost": 1
}
}
}
],
"disable_coord": false,
"adjust_pure_negative": true,
"boost": 1
}
},
"sort": [
{
"date_time": {
"order": "desc"
}
}
]
}
已邀请:

xiaoyanghapi - Elasticsearch 爱好者

赞同来自:

你可以考虑将一个term查询放到filter中,目的是用这个term查询将范围缩小,之后的查询压力就小了。

要回复问题请先登录注册