如何在Elasticsearch搜索请求中同时返回文档与Term Vectors?
Elasticsearch搜索返回文档附带Term Vector的可行性解答
这个需求是完全可行的,不需要依赖“索引后立即获取并存储term vector”的替代方案,直接通过搜索API即可实现。
实现步骤
确保字段开启Term Vector支持
目标字段的mapping必须配置term_vector参数(可选值:yes、with_positions、with_offsets、with_positions_offsets等),示例mapping配置:PUT /your_index { "mappings": { "properties": { "target_field": { "type": "text", "term_vector": "yes" } } } }搜索时直接返回Term Vector
在_search请求中通过script_fields调用内置方法,获取每个匹配文档指定字段的term vector,示例请求:GET /your_index/_search { "query": { // 你的查询条件,比如match、term等 "match": { "target_field": "your_keyword" } }, "script_fields": { "target_field_term_vector": { "script": { "source": "doc['target_field'].getTermVector()" } } } }响应结果中,每个匹配文档的
fields字段下会包含对应的term vector数据。
备选方案(批量获取)
如果需要更灵活的term vector参数配置(比如获取词频、文档频率等统计信息),也可以先执行搜索得到匹配文档的ID集合,再调用批量_termvectors API一次性获取所有文档的term vector,但这种方式需要两次请求,效率略低于直接在搜索中获取。
内容的提问来源于stack exchange,提问作者roykeane
相关产品推荐
相关产品推荐

