如何获取Elasticsearch中无匹配结果的搜索词列表及使用统计?
Elasticsearch无结果搜索词汇统计方案
Elasticsearch不会自动记录无结果返回的搜索词汇及次数,这类数据需要你手动追踪实现,以下是几种可行方案:
1. 应用层直接拦截统计
在业务代码里,每次执行ES搜索请求后,判断返回结果中hits.total.value是否为0:
- 若为0,将当前实际搜索的词汇(注意要和发送给ES的查询词一致,包括经过分析器处理后的内容)写入专门的统计索引或数据库
- 后续直接查询统计索引,通过聚合操作就能得到各无结果词汇的搜索次数
比如你提供的示例查询,执行后检查命中数为0时,就记录TermThatReturnsNoRecords的搜索行为。
2. 用搜索模板+脚本实现自动记录
创建ES搜索模板,在模板中嵌入脚本逻辑:
- 执行查询后通过脚本判断命中数
- 若命中数为0,调用
_update_by_query直接写入统计索引,完成自动记录
这种方式需要开启ES脚本支持,会增加ES节点负载,适合低流量场景。
3. 基于日志的间接统计
调整ES日志配置,让日志输出完整的查询请求内容,再通过日志收集工具(如Filebeat)将日志导入到另一个ES索引:
- 解析日志中的查询内容和返回的命中数
- 筛选出命中数为0的记录,聚合统计对应词汇的搜索次数
这种方式无需修改业务代码,但需要搭建额外的日志处理链路,日志解析成本较高。
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

