五十二、Elasticsearch初识搜索引擎-相关评分度TF/IDF算法揭秘

1、算法介绍

relevance score算法,简单来说,就是计算出,一个索引中的文本,与搜索文本,他们之间的关联匹配程度。

Elasticsearch使用的是term frequency/inverse document frequency算法,简称TF/IDF算法

(1)Term frequency:搜索文本中的各个词条在field文本中出现了多少次,出现次数越多,就越相关。

比如:
doc1:hello you,and world is very good
doc2:hello,how are you

搜索hello world,首先会进行分词hello,world
发现doc1中两个词都匹配,doc2中只匹配hello,则doc1的score最大,优先被匹配。

(2)Inverse document frequency:搜索文本中的各个词条在整个索引的所有文档中出现了多少次,出现的次数越多,就越不相关。

比如:
doc1:hello, today is very good
doc2:hi world, how are you

搜索hello world,首先会进行分词hello,world
首先hello,world在doc1和doc2中都只出现了1次。
其次比如说,在index中有1w条document,hello这个词在所有的document中一共出现了1000次,world这个单词在所有的document中一共出现了100次。

则doc2更相关。

(3)Field-length norm:field越长,相关度越弱。

比如:
doc1:{ "title": "hello article", "content": "babaaba 1万个单词" }
doc2:{ "title": "my article", "content": "blablabala 1万个单词,hi world" }

搜索hello world,首先会进行分词hello,world
首先hello,world在doc1和doc2中都只出现了1次。
其次假设在整个index中出现的次数是一样多的。
则doc1更相关,因为title field比content field短太多了,content field一万多个单词。

2、_score是如何被计算出来的?

GET /test_index/test_type/_search?explain
{
  "query": {
    "match": {
      "test_field": "test hello"
    }
  }
}

3、分析一个document是如何被匹配上的

GET /test_index/test_type/6/_explain
{
  "query": {
    "match": {
      "test_field": "test hello"
    }
  }
}

若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:


qrcode_for_gh_577b64e73701_258.jpg

推荐阅读更多精彩内容