Skip to content
📖0 阅读·🤍0 点赞

ES常用文档排名类型故事版

  • dense_vector:记录浮点值的密集向量。(机器学习、自然语言处理和推荐系统等)
  • rank_feature:记录数字特征以提高查询时的命中率。( 需要根据一些特征:页面排名、点击量、类别, 对文档进行动态的评分的场景)
  • rank_features:记录数字特征以提高查询时的命中率。 好的,我们继续数字村的故事!现在村民们不再满足于简单的存储和查找,他们希望系统能"智能"地推荐和排序。于是,村里成立了"智能推荐中心",专门处理文档排名和相似度匹配。

故事:数字村的智能推荐中心

数字村的数据越来越丰富,村民们常常面临这样的问题:

  • "我想找和这篇文章最相似的10篇文章"
  • "搜索关键词时,应该把哪些结果排在最前面?"
  • "如何根据文章的热度、点击量、发布时间等综合因素进行排序?"

为了解决这些问题,村里成立了智能推荐中心,由三位各怀绝技的专家组成:

  1. 高维特征建模师 (dense_vector) - 密集向量类型

    • 专家: 向量博士
    • 招牌: "万物皆可向量,相似度一算便知!"
    • 做什么:
      • 向量博士有一种神奇的能力:他能把任何复杂的东西(一篇文章、一张图片、一段语音)转换成一串数字,这串数字就是"向量"。比如:
      • 一篇文章可能被表示为:[0.12, -0.45, 0.88, ..., 0.67](通常是几百维)
      • 这个向量就像是这篇文章的"数字DNA",包含了文章的深层语义特征
    • 应用场景:
      • 语义搜索:搜索"苹果"时,既能找到水果相关的文章,也能找到iPhone相关的文章,因为它们的向量表示很接近
      • 推荐系统:喜欢A文章的用户,可以推荐与A向量相似的其他文章
      • 图像检索:用一张猫的图片,找到其他猫的图片
      • 异常检测:找到与其他文档向量差异很大的异常文档
    • 特点:
      • 每个向量通常有数百到数千个维度
      • 支持余弦相似度、点积、L2距离等相似度计算
      • 需要配合机器学习模型(如BERT)来生成向量
  2. 单项排名助推器 (rank_feature) - 单数值特征排名

    • 专家: 单推手
    • 招牌: "一个特征,决定排名!"
    • 做什么:
      • 单推手专注于用单个数值特征来影响搜索结果的排名
      • 他处理的是那些明显影响文档重要性的"信号"
    • 应用场景:
      • 页面权重:维基百科中重要页面的PageRank值
      • 点击热度:文章的点击量或阅读量
      • 发布时间:新发布文章的时效性分数
      • 用户评分:产品的平均评分
    • 怎么工作:
      json
      "page_rank": {  // 这是一个rank_feature字段
        "type": "rank_feature",
        "boost": 2.0  // 这个特征在排名中的重要性系数
      }
      • 当用户搜索时,单推手会根据这个特征的值给文档"加分",影响最终排名
    • 特点:
      • 专门优化单个数值特征的排名效果
      • 支持饱和度函数(避免单一特征主导排名)
      • 查询时可以通过rank_feature查询动态调整权重
  3. 多特征排名指挥官 (rank_features) - 多数值特征排名

    • 专家: 多面手
    • 招牌:"综合考量,最优排名!"
    • 做什么:
      • 多面手是单推手的升级版,他能同时处理多个排名特征
      • 现实中的排名往往是多个因素综合作用的结果
    • 应用场景:
      • 新闻排序:综合考虑时效性、权威性、点击量、分享数
      • 电商排序:综合考量销量、评分、价格、库存、促销力度
      • 视频推荐:结合热度、时长、清晰度、用户偏好
    • 怎么工作:
      json
      "ranking_signals": {  // 这是一个rank_features字段
        "type": "rank_features",
        "features": {
          "freshness": 0.8,    // 新鲜度
          "popularity": 0.9,   // 热度
          "authority": 0.7,    // 权威性
          "relevance": 0.95    // 相关性
        }
      }
      • 每个特征都可以有不同的权重,综合计算最终排名分数
    • 特点:
      • 可以同时处理多个排名信号
      • 支持特征之间的加权组合
      • 更灵活地模拟复杂的排名策略

三位专家的协同作战

在实际的搜索场景中,三位专家经常协同工作:

  1. 第一阶段:向量博士的语义匹配

    • 先用dense_vector找到与查询语义相似的一批候选文档
    • 比如搜索"人工智能应用",找到所有在向量空间中和这个主题接近的文章
  2. 第二阶段:单推手和多面手的排名优化

    • 在语义相似的基础上,用rank_featurerank_features进行精细排名
    • 考虑:这篇文章是否权威?(权威性特征)
    • 考虑:这篇文章是否热门?(热度特征)
    • 考虑:这篇文章是否新鲜?(时效性特征)
  3. 最终结果:智能排序的搜索结果

    • 既保证了内容的相关性(语义匹配)
    • 又保证了结果的质量和时效性(排名特征)

对比总结

专家擅长领域好比是...典型应用
向量博士 (dense_vector)内容相似度计算文章的"DNA比对"语义搜索、推荐系统
单推手 (rank_feature)单个排名信号优化比赛的"单项加分"按热度、权威性排序
多面手 (rank_features)多因素综合排名比赛的"综合评分"电商搜索、新闻排序

实战示例

想象一个新闻搜索场景:

json
{
  "article_id": "news_123",
  "title": "人工智能最新突破",
  "content": "......",
  "content_vector": [0.12, -0.45, 0.88, ...],  // dense_vector:语义特征
  "publish_time": 1672531200,
  "ranking_signals": {  // rank_features:多个排名信号
    "click_count": 1500,     // 点击量
    "share_count": 300,      // 分享数
    "author_score": 0.8,     // 作者权威分
    "freshness": 0.9         // 新鲜度
  },
  "is_featured": true        // rank_feature:是否头条
}

当用户搜索"AI新闻"时,智能推荐中心会:

  1. content_vector找到所有AI相关的文章
  2. ranking_signals中的多个特征进行综合排名
  3. is_featured为true的文章额外加分
  4. 最终返回既相关又高质量的搜索结果

这就是数字村智能推荐中心的魔力所在!🎯