ElasticSearchngram评分是如何工作的?

f3temu5u  于 5个月前  发布在  ElasticSearch
关注(0)|答案(1)|浏览(36)

我的索引中有两个文档。一个包含字段:

name: foo bar

字符串
和另一

name: foo xyz bar xyz foo xyz bar xyz foo xyz bar xyz foo xyz bar


我是这样使用ngram分析器的:

"analysis": {
  "analyzer": {
    "ngram_analyzer": {
      "tokenizer": "ngram_tokenizer"
    }
  },
  "tokenizer": {
    "ngram_tokenizer": {
      "type": "ngram",
      "min_gram": 3,
      "max_gram": 3,
      "token_chars": [
        "letter",
        "digit",
        "whitespace"
      ]
    }
  }
}


当我搜索foo bar时,第一个文档得到的分数比第二个高。这就是我想要的,但有人能解释一下这个评分是如何工作的吗?因为我知道ngram将它们分为3个字符长度,它是如何发现foobar在第一个文档中是顺序排列的,并为它分配更高的分数的?

beq87vna

beq87vna1#

Elasticsearch中的相关性/评分在您开始时并不是最容易的部分。评分计算基于三个主要部分:

  • Term频率
  • 逆文档频率
  • 场长范数

转瞬间:

  • 该术语在字段中出现的次数越多,相关性就越高
  • 该术语在整个索引中出现的次数越多,则相关性越低
  • 期限越长,相关性就越强

我建议您阅读以下材料:

但是另外,分数将取决于您使用的查询类型。例如,对于match查询,foo bar搜索项比第二个更适合foo bar文档。

相关问题