ES中similarity参数故事版
similarity
similarity 指定文档的评分模型
similarity 备注 BM25 es 和 lucene 默认的评分模型 classic TF/IDF 评分 boolean boolean 模型评分
similarity:数字村的「美食评分大赛」🍽️🏆
想象数字村每年举办一次美食评分大赛,三位风格迥异的评委用不同的标准给菜品打分。这就是Elasticsearch的三种相似度评分模型!
故事:三位美食评委的评分哲学
1. BM25评委:现代综合评分师(默认选择)
json
"recipe_title": {
"type": "text",
"similarity": "BM25" // 默认评委
}
评分特点:
- 🧠 智能平衡:考虑词频,但避免过度重复
- 📏 长度归一:长菜谱不会单纯因词多而高分
- 🔄 饱和机制:一个词出现5次后,额外出现价值递减
实战案例:
json
// 菜谱A: "红烧肉 红烧肉 红烧肉"(重复3次)
// 菜谱B: "红烧肉 搭配 土豆 胡萝卜"(出现1次)
// BM25评分:
// 菜谱A:8分(重复有加成但饱和)
// 菜谱B:7分(内容丰富均衡)
2. Classic评委:传统严格老师(TF/IDF)
json
"recipe_old": {
"type": "text",
"similarity": "classic" // 传统评分
}
评分特点:
- 📊 词频至上:出现次数越多分数越高
- 🚫 无视长度:长菜谱容易得高分
- 📈 线性增长:出现10次就得10倍分数
实战案例:
json
// 同样搜索"红烧肉"
// 菜谱A: "红烧肉"重复10次 → 10分
// 菜谱B: "红烧肉"出现1次 → 1分
// 结果:菜谱A排名第一(可能内容空洞)
3. Boolean评委:极简主义裁判
json
"recipe_tags": {
"type": "text",
"similarity": "boolean" // 极简评分
}
评分特点:
- 0️⃣ 非黑即白:要么0分(不存在),要么1分(存在)
- ⚖️ 绝对平等:所有匹配词项价值相同
- 🚀 速度最快:计算简单粗暴
实战案例:
json
// 搜索"辣 川菜"
// 菜谱A:包含"辣"和"川菜" → 得分:1(存在)
// 菜谱B:只包含"辣" → 得分:1(存在)
// 结果:A和B并列第一(无法区分质量)
评分模型对比表
评分模型 | 比喻 | 优点 | 缺点 | 适用场景 |
---|---|---|---|---|
BM25 | 米其林评委 | 智能防作弊 | 计算稍复杂 | 通用搜索(默认) |
Classic | 传统美食家 | 结果可预测 | 易被操纵 | 学术文献检索 |
Boolean | 快餐质检员 | 速度极快 | 无法排序 | 标签过滤 |
实战配置示例
场景1:电商商品搜索(推荐BM25)
json
PUT ecommerce
{
"mappings": {
"properties": {
"product_name": {
"type": "text",
"similarity": "BM25" // 防关键词堆砌
}
}
}
}
- ✅ 防止"手机手机手机"这种垃圾SEO排名靠前
场景2:法律条文检索(适合Classic)
json
PUT law_library
{
"mappings": {
"properties": {
"article_content": {
"type": "text",
"similarity": "classic" // 词频反映重要性
}
}
}
}
- ✅ "宪法"出现次数越多,条文越重要
场景3:商品标签过滤(Boolean最佳)
json
PUT products
{
"mappings": {
"properties": {
"product_tags": {
"type": "text",
"similarity": "boolean" // 只需判断存在性
}
}
}
}
- ✅ 搜索"促销+新品"标签,不关心出现次数
自定义评分模型进阶
调整BM25参数
json
// 像定制评委的评分表
PUT custom_index
{
"settings": {
"similarity": {
"my_bm25": {
"type": "BM25",
"k1": 1.2, // 词频饱和度
"b": 0.75 // 长度归一化强度
}
}
},
"mappings": {
"properties": {
"content": {
"type": "text",
"similarity": "my_bm25" // 使用定制评分
}
}
}
}
参数含义:
- k1值调高:词频影响更大(更像Classic)
- b值调高:长度惩罚更严厉(短文档优势更大)
记忆口诀
美食评分三评委:
- BM25:智能评委
防作弊
重质量
现代首选
- Classic:传统评委
数次数
可预测
经典可靠
- Boolean:极简评委
只看有无
不论多少
过滤专用
选择指南:
🟢 日常搜索 → BM25(默认)
🟡 词频重要 → Classic
🔴 只需过滤 → Boolean
记住这个美食大赛的比喻,轻松选出最适合的评分模型!🎯👨🍳