Elasticsearch中best_field和most_field有什么区别?

14

我已经阅读了这篇文章 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html

但是我自己无法理解。

我们有以下两个查询:

第一个问题

GET blablabla/_search
{
  "query": {
    "multi_match": {
      "query": "games usa",
      "fields": ["title1", "title2"],
      "type": "best_fields"
    }
  }
}

第二

get blablabla/_search
{
  "query" : {
    "multi_match": {
      "query": "games usa",
      "fields": ["title1", "title2"],
      "type": "most_fields"
    }
  }
}

我认为第一个查询的意思是:

获取标题1或标题2字段中包含 (games) 或 (usa) 或 (games and usa) 单词的文档。

但是,我不知道第二个查询的含义。

请问可以帮忙吗?

(我使用的是 Elasticsearch 2.2)

2个回答

31

Elastic Search中执行搜索操作时,会计算每个匹配文档的相关性。根据文档说明-

每个文档的相关性得分由一个称为_score的正浮点数表示。得分越高,文档越相关。

根据您以上提到的示例。

GET blablabla/_search
{
"query": {
"multi_match": {
  "query": "games usa",
  "fields": ["title1", "title2"],
  "type": "best_fields"
   }
  }
}

此查询将查找包含 games AND/OR usa 的文档,这些文档可以在 title1 或者 title2 字段中出现,但是 _score 将从与查询条件最匹配的单个字段中计算得出。
例如:

  • 如果同一个文档中,title1 包含 games,而 title2 包含 games usa,那么 _score 将取自于 title2
  • best_fields 在您搜索在同一字段内找到多个单词时最为有用。

most_fields 中:

GET blablabla/_search
{ 
"query" : {
"multi_match": {
  "query": "games usa",
  "fields": ["title1", "title2"],
  "type": "most_fields"
   }
  }
}

此查询将查找包含 games AND/OR usa 的文档,这些文档的 title1title2 字段中出现,但 _score 将根据所有字段的组合进行计算。例如-

  • 如果同一文档的 title1 包含 games,而 title2 包含 games usa,则 _score 将是从 title1title2 的分数组合计算得出的。

希望这有所帮助。


2
非常好的解释。 - Visakh Vijayan
非常清晰的解释 @Richa - Varun Sharma

3

关于 most_fields 的一个小说明 - 它使用两个字段的得分并将其除以字段数。

在你的例子中: (标题1的得分 + 标题2的得分)/ 2


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接