elasticsearch ngram评分如何工作?

时间:2018-08-12 20:44:08

标签: elasticsearch

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

 name: foo bar

和另一个

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

我正在像这样使用ngrams分析器:

"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在第一个文档中是按顺序排列的,并赋予它较高的分数?

1 个答案:

答案 0 :(得分:0)

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

  • 学期频率
  • 反文档频率
  • 字段长度范数

简短地:

  • 该术语在田间经常出现,更相关的是
  • 该术语通常出现在整个索引中,与LESS相关的是
  • 期限越长,相关性越强

我建议您阅读以下材料:

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