Elasticsearch 7.13版本script_score查询高亮功能不生效如何解决?
Elasticsearch 7.13 script_score查询高亮不生效解决方案
根本原因
Elasticsearch 高亮功能需要依赖查询阶段生成的词项匹配元数据,你当前script_score内部使用match_all作为子查询,没有针对content字段产生任何实际匹配记录,高亮模块无内容可标记,因此无法返回高亮片段。
修复方案
分两种常用场景调整查询:
场景1:同时需要关键词匹配+向量相似度排序
使用bool查询将关键词匹配查询与script_score查询结合,关键词查询会自动生成高亮所需的匹配元数据:
{ "_source": {"excludes": ["tag","document_vector"]}, "query": { "bool": { "should": [ // 替换为实际业务的content字段查询条件 { "match": { "content": "你要搜索的关键词" } }, { "script_score": { "query": { "match_all": {} }, "script": { "source": "cosineSimilarity(params.query_vector, 'document_vector') + 1.0", "params": { "query_vector": "你的向量参数" } } } } ] } }, "sort": [ { "_score": { "order": "desc" } } ], "highlight": { "order": "score", "number_of_fragments": 3, "fragment_size": 150, "pre_tags": [ "<mark>" ], "post_tags": [ "</mark>" ], "fields": { "content": {} } } }
场景2:仅用向量召回,需要自定义高亮关键词
如果不需要关键词过滤召回,只需要对指定关键词做高亮,可以直接在高亮配置中单独指定匹配查询:
{ "_source": {"excludes": ["tag","document_vector"]}, "query": { "script_score": { "query": { "match_all": {} }, "script": { "source": "cosineSimilarity(params.query_vector, 'document_vector') + 1.0", "params": { "query_vector": "你的向量参数" } } } }, "sort": [ { "_score": { "order": "desc" } } ], "highlight": { "order": "score", "number_of_fragments": 3, "fragment_size": 150, "pre_tags": [ "<mark>" ], "post_tags": [ "</mark>" ], "fields": { "content": { // 单独指定高亮用的匹配查询 "highlight_query": { "match": { "content": "你要高亮的关键词" } } } } } }
注意事项
- 确保
content字段未被_source排除,本次你的配置中仅排除了tag和document_vector,符合要求无需调整 - 若
content字段使用自定义分词器,需保证高亮查询的分词器与字段映射配置的分词器一致,避免出现匹配异常
内容的提问来源于stack exchange,提问作者Ejaz Ahmed
相关产品推荐
相关产品推荐

