AWS Opensearch调用_termvectors仅统计单文档term_statistics问题咨询
问题原因
这是AWS OpenSearch的默认分片策略带来的行为,不属于功能故障。
- 当你的索引配置了多个分片时,默认情况下
_termvectors接口只会拉取目标文档所在分片的局部统计值,不会跨分片聚合全索引的统计数据。如果对应term在该分片上仅出现在你查询的单篇文档中,就会出现doc_freq固定为1、ttf与term_freq完全一致的情况。 - 本地Elasticsearch环境通常默认单分片部署,所有文档都存在同一个分片上,所以默认就能拿到全量统计结果,和AWS OpenSearch的表现差异本质是分片配置不同导致的。
修复方案
只需要在你的_termvectors请求参数中添加"dfs": true即可触发全分片统计聚合,返回符合预期的全索引统计值,修改后的请求示例如下:
GET <my-index>/_termvectors/<docId>?fields=content { "field_statistics": false, "term_statistics": true, "positions": false, "payloads": false, "offsets": false, "dfs": true }
注意事项
- 开启
dfs参数后,接口需要跨所有分片拉取统计信息再做聚合,查询延迟会高于默认模式,数据量越大、分片数越多延迟上升越明显,不建议在高并发的在线查询链路中使用。 - 如果你的索引总数据量不大,也可以在建索引时设置
number_of_shards: 1,单分片索引下不需要加dfs参数也能拿到正确的全量统计结果。
内容的提问来源于stack exchange,提问作者Vuk Djapic
相关产品推荐
相关产品推荐

