Elasticsearch match查询如何提升关键词顺序匹配文档的得分
Elasticsearch 短语顺序匹配得分优化方案
普通match查询仅校验查询分词是否全部存在,不校验词的顺序和相邻关系,默认BM25打分仅基于词频、逆文档频率等因子,因此会出现顺序不匹配的文档得分更高的情况。要实现按指定顺序出现关键词的文档加权,可通过bool查询组合基础匹配和短语加权逻辑实现,具体实现如下:
方案实现
使用bool查询的must子句保留原有全词匹配的召回逻辑,保证所有包含三个关键词的文档都能被召回;新增should子句添加match_phrase短语匹配规则,给命中完整顺序短语的文档加额外权重:
GET my_index/_search { "query": { "bool": { "must": [ { "match": { "title": { "query": "energy saving tv", "operator": "and" } } } ], "should": [ { "match_phrase": { "title": { "query": "energy saving tv", "boost": 2, // 可自定义调整权重值,值越高顺序匹配的文档排序越靠前 "slop": 0 // 若允许短语中间插入少量其他词,可调整该参数为允许的最大间隔数 } } } ] } } }
规则说明
must子句是必须满足的条件,和原有查询逻辑完全一致,不会缩小召回范围should子句仅用于加权算分,不需要强制命中,命中短语匹配的文档会额外获得权重加成- 你可以根据业务需要调整
boost参数的大小,直到顺序匹配的T1得分高于T2即可
内容的提问来源于stack exchange,提问作者TanPS
相关产品推荐
相关产品推荐

