Elasticsearch索引查询无法返回完整highlight字段内容的解决方案
问题解决方法
问题原因
你的highlight字段默认是text类型(字符串类型在Elasticsearch中默认映射为text),该类型会被分词处理。当使用fields参数查询时,返回的是字段分词后的词项列表,你存储的内容"[""first"",""second"",""third""]"被分词后,first是第一个词项,因此只返回了这一个结果,而非完整的原始字符串。
解决办法
方法1:改用_source指定字段(推荐,无需修改映射)
直接通过_source指定要获取的字段,它会返回文档原始存储的完整内容,替代原来的fields参数:
{ "_source": ["highlight"], "query": { "bool": { "must": [ { "range": { "created_date": { "gte": "2023-01-01", "lte": "2023-01-02" } } } ] } } }
方法2:修改字段映射,添加keyword子字段
如果必须使用fields参数,可以给highlight字段添加keyword类型的子字段(keyword类型不会分词,会保留完整字符串):
- 更新索引映射:
PUT /你的索引名/_mapping { "properties": { "highlight": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } } }
- 查询时指定
highlight.keyword字段:
{ "fields": ["highlight.keyword"], "_source": false, "query": { "bool": { "must": [ { "range": { "created_date": { "gte": "2023-01-01", "lte": "2023-01-02" } } } ] } } }
内容的提问来源于stack exchange,提问作者Arthur
相关产品推荐
相关产品推荐

