前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ES搜索相似度

ES搜索相似度

作者头像
小土豆Yuki
发布2022-06-24 14:07:43
9910
发布2022-06-24 14:07:43
举报
文章被收录于专栏:洁癖是一只狗洁癖是一只狗

今天再来一道面试真题,es的搜索的相似度算法如何计算

首先,我们要从这几方面回答

  1. TF(term frequency)检索词频率
  2. IDF(inversed document frequency)反向文档频率
  3. length norm,字段长度准则
  4. query vector(查询向量)和doc vector(文档向量)
代码语言:javascript
复制
单个term在doc中的分数
query: hello world --> doc.content
doc1: java is my favourite programming language, hello world !!!
doc2: hello java, you are very good, oh hello world!!!

检索词频率

比如上面的hello在在doc1出现了1次,会根据出现的次数给个分数,一个term在doc中出现的次数越多,分数就越高

反向文档频率

找到hello在所有doc中出现的次数,比如上面出现了3次,一个term在所有doc 中出现的次数越多,分数就越低,比如我们的and 或the常用词,就会频繁出现,对分数的贡献就很少,所以分数就比较小

字段长度准则

hello搜索的doc长度越长,给的相关性评分越低,doc越短,给的相关性评分越高,

检索词出现在一个短的 title 要比同样的词出现在一个长的 content 字段权重更大,

最后,hello这个关键字会根据IF,IDF,length norm给一个综合分数.

文档向量

比如hello world ,有3doc,其中一个doc1包含一个hello,另外一个doc2包含word,doc3包含hello world,比如下面

doc1----->[2,0]

doc2----->[0,5]

doc3----->[2,5]

每一个doc都会计算出term计算出一个分数,hello 一个分数,world一个分数,都会计算出一个分数组,所有的分数组形成一个文档向量

查询向量

比如hello world,es会根据hello world在所有doc中的评分情况,计算一个查询向量,比如hello基于所有doc都有一个评分为2,world基于所有doc都有一个评分5,查询向量就是[2,5]

计算相似度

每个文档向量计算出对查询向量的弧度,基于这个弧度给出一个doc相对于query中多个term的总分数,弧度越大,分数越低,弧度越小,分数越高

大家不必要说这个弧度是如何计算出来的,我也不知道,有兴趣的可以研究一下,里面都是数学相关的东西

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 洁癖是一只狗 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档