You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:24:04