Elasticsearch如何查询匹配关键词对应的文本起止索引位置?
1 符合需求的搜索查询编写方法
1.1 前置配置:调整字段映射
要获取关键词的字符起止位置,首先需要给存储目标文本的字段开启词偏移存储配置,ES默认不会保留该类信息。在创建索引时给对应字段设置term_vector参数为with_positions_offsets即可,示例请求如下:
PUT /doc_index { "mappings": { "properties": { "content": { "type": "text", "term_vector": "with_positions_offsets" } } } }
如果索引已经创建且存在存量数据,更新映射后需要重新索引所有数据,配置才能生效。
1.2 具体查询语句
你可以直接在原有match查询的基础上增加高亮配置,开启偏移返回参数,即可同时拿到匹配文档和对应关键词的起止位置,示例查询如下:
GET /doc_index/_search { "query": { "match": { "content": "test" } }, "highlight": { "fields": { "content": { "offsets": true } } } }
返回结果的highlight.content字段中会直接返回匹配项的start_offset和end_offset,和你示例中期望的start_index=10、end_index=13的结果完全匹配。
如果已经确定了目标文档ID,也可以直接用Term Vectors API查询该文档所有分词的位置信息:
GET /doc_index/_termvectors/你的文档ID?fields=content
2 可查阅的官方文档板块
你可以在Elasticsearch官方文档中查找以下板块的内容获取对应说明:
- 映射参数配置下的
term_vector参数说明部分 - 搜索功能下的高亮(Highlighting)配置说明部分
- Term Vectors API的使用说明部分
内容的提问来源于stack exchange,提问作者Ali NG
相关产品推荐
相关产品推荐

