Elastic Search关键词堆砌与排序评分问题求助
演示文稿搜索排序实现方案
要满足你提出的两个场景排序需求,核心是设计一套优先精准匹配、次选低冗余关键词匹配、最后处理关键词堆砌的排序规则,同时全程做大小写不敏感处理。
核心规则(不区分大小写)
- 精准匹配优先:将标题和搜索词统一转为小写后,若完全一致,直接赋予最高排序优先级。
- 低冗余完整匹配次之:标题包含搜索词的所有关键词,且关键词无重复堆砌(出现次数接近搜索词中的次数),优先级仅次于精准匹配。
- 关键词堆砌排最后:标题大量重复搜索关键词,优先级最低。
具体打分逻辑(可直接落地)
先将所有标题和搜索词转为小写处理,再按以下步骤计算得分:
- 精准匹配分:若
lower(标题) == lower(搜索词),得100分(直接锁定第一顺位)。 - 基础匹配分:若标题包含搜索词的所有关键词,得70分;否则得0分。
- 冗余惩罚分:统计标题中搜索词所有关键词的总出现次数,除以搜索词中对应关键词的总出现次数,得到冗余系数:
- 冗余系数 ≤ 1.5:不扣分
- 冗余系数 > 1.5:每超出0.5,扣10分(比如冗余系数为4,超出2.5,扣50分)
- 最终得分:基础匹配分 - 冗余惩罚分
场景验证
场景1:搜索词Bake cake
- 演示文稿2:
lower(标题)=bake cake,与搜索词小写完全一致,得100分,排首位。 - 演示文稿1:
lower(标题)=bake cake bake bake cake cake cake bake,包含所有关键词,基础分70;关键词总出现次数8,搜索词总次数2,冗余系数4,扣50分,最终得分20,排第二位。
场景2:新增演示文稿3bake A cake
- 演示文稿2:精准匹配得100分,排第一。
- 演示文稿3:
lower(标题)=bake a cake,包含bake和cake所有关键词,基础分70;关键词总出现次数2,搜索词总次数2,冗余系数1,不扣分,最终得分70,排第二。 - 演示文稿1:得分20,排第三。
完全符合要求的排序:演示文稿2 → 演示文稿3 → 演示文稿1
内容的提问来源于stack exchange,提问作者Kharad
相关产品推荐
相关产品推荐

