首页/数据/NoSQL 速查/_termvectors 查看词条与词频
Elasticsearch89 条

_termvectors 查看词条与词频

term vectors 返回字段的分词结果、词频与位置信息,用于验证写入后的实际索引内容、排查同义词与分词异常;需字段保存 term_vector 或从 _source 现算。

NoSQL 速查数据更新于 2026-10-13

_termvectors 是什么

_termvectors 返回某个文档字段的分词结果与词频,用来验证写入后实际索引进去的内容,排查同义词、分词器以及查询与索引不一致的问题。接口形式是 GET /<index>/_termvectors/<id>?fields=...,返回 tokens(词条、位置、偏移)与 terms(词频)。字段没有单独配置 term_vector 时,服务端会大致从 _source 重新分析一遍,结果与真正的索引内容可能存在细微差别。

基本信息

接口GET /<index>/_termvectors/<id>?fields=message
返回tokens(词条与位置)与 terms(词频)
常用参数fields、term_statistics、positions、offsets
前提字段配置 term_vector 后返回精确存储内容
对照接口_analyze 用于查看分析器的输出

典型使用场景

  • 排查查不到:对比写入分析与查询分析的差异
  • 验证分词:确认中文或自定义分析器把文本切成了预期的词条
  • 检查词频:看某词在字段里出现了几次,辅助判断相关性
  • 核对同义词:确认同义词在索引阶段是否已经展开
  • 无 _source 场景:关闭了 _source 但开启 term_vector 时仍能查词条

查询与对照

查询与对照
GET /my-index/_termvectors/1?fields=message&term_statistics=true&positions=true

GET /my-index/_termvectors/1?fields=message&offsets=true&positions=true

# 对照:查询侧的分析结果
POST /my-index/_analyze
{
  "field": "message",
  "text": "elasticsearch tutorial"
}

返回值读法

返回项含义读法
tokens词条及位置偏移看切分是否符合预期
terms词频统计判断某词在字段里出现几次
term_statistics全局词频未存储时返回为空
positions位置信息短语查询能否命中与此相关
offsets字符偏移高亮范围依赖它
搜索无命中的排查思路:先用 _analyze 看查询词被切成什么,再用 _termvectors 看文档里实际存了什么,两边一对就能确认问题出在写入分析还是查询分析。
大字段的 termvectors 响应可能非常大,调试时限定 fields 与返回参数,避免一次拉回整篇文档的全部词条把客户端拖垮。
它是单文档视角的调试工具:想批量观察某字段的分词结果应改用 _analyze,逐条调用在数据量大时不可行。
位置与偏移信息在部分字段配置下并不存储,返回为空不代表分词失败,先确认该字段是否开启了对应选项再下结论。

易错点

  • 索引时不保存词频统计时 term_statistics 返回空,别误判为没有分词
  • 大字段的 termvectors 响应可能很大,调试时限定 fields 与参数
  • 把未配置 term_vector 时返回的结果当精确值:那只是从 _source 重新分析的近似结果
  • 对关闭了 _source 又没开 term_vector 的字段调用取不到词条,排查前先确认字段设置

数据来源与参考

  • Elasticsearch Guide: Term vectors API
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌