如何在Elasticsearch的KNN查询中结合字段权重提升?
为KNN查询添加字段权重调整方案
要给file-type=pdf的文档设置权重调整(你指定的0.1为权重系数,若需提升权重请设大于1的数值),可通过Elasticsearch的function_score查询实现,将KNN向量查询作为基础查询,再添加字段匹配的权重规则:
POST my-image-index/_search { "size": 3, "query": { "function_score": { "query": { "knn": { "field": "image-vector", "query_vector": [-5, 9, -12], "num_candidates": 10 } }, "functions": [ { "filter": { "term": { "file-type": "pdf" } }, "weight": 0.1 } ], "boost_mode": "multiply" } } }
核心逻辑说明:
function_score:允许在基础查询得分之上,对符合特定条件的文档调整权重。filter:精准匹配file-type=pdf的文档,仅对这类文档应用权重规则。weight:权重系数,这里的0.1会让匹配文档的最终得分 = KNN查询得分 × 0.1;若需要提升权重,可设置为大于1的数值(如2表示得分翻倍)。boost_mode:指定得分计算方式,multiply为默认值,即基础得分与权重相乘,也可根据需求选择sum(得分相加)等其他模式。
若需对多类字段设置不同权重,只需在functions数组中添加更多规则即可。
内容的提问来源于stack exchange,提问作者user2900970
相关产品推荐
相关产品推荐

