面试题答案
一键面试查询方案
- 时间范围优化:利用Elasticsearch的时间范围查询,只检索过去一周的数据。可以通过设置时间戳字段的范围来实现。这可以大大减少检索的数据量,因为只针对最近一周的日志进行搜索,避免对全部海量数据的扫描。
- 过滤缓存:Elasticsearch有缓存机制,对于经常查询的固定条件(如这里的ERROR级别),缓存可以提高后续查询效率。将日志级别为ERROR作为一个过滤条件,利用Elasticsearch的过滤缓存,该缓存不计算相关性分数,性能较高。
- 字段数据结构优化:确保日志内容字段(log_content)进行了合适的分词处理,以便高效地进行关键字搜索。如果日志内容非常长,可考虑使用更高效的文本处理方式,如将长文本拆分成合理的片段进行索引,这样在搜索时可以减少不必要的文本处理开销。
核心查询语句
{
"query": {
"bool": {
"filter": [
{
"range": {
"timestamp": {
"gte": "now-1w",
"lte": "now"
}
}
},
{
"term": {
"log_level": "ERROR"
}
}
],
"must": [
{
"match": {
"log_content": "critical failure"
}
}
]
}
}
}
上述语句中,range
子句用于限定时间范围为过去一周,term
子句用于过滤出日志级别为ERROR的日志,match
子句用于在日志内容中搜索包含 critical failure
关键字的日志。通过 bool
组合这些条件,filter
部分利用缓存提高性能,must
部分确保关键字匹配。