11

我已经准备好这篇文章 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"
    }
  }
}

我认为第一个查询意味着:

获取在 title1 或 title2 字段中包含 (games) 或 (usa) 或 (games and usa) 单词的文档。

但是,我不知道第二个是什么意思。

请问我可以寻求帮助吗?

(我在弹性搜索 2.2 上)

4

2 回答 2

23

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

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

根据你上面提到的例子

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

此查询将查找在or中包含games AND/OR 但将从单个最佳匹配字段计算的文档。例如-usatitle1title2_score

  • 如果title1containsgamestitle2containsgames 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将根据所有字段的组合进行计算。例如-

  • 如果title1containsgamestitle2containsgames usa在同一个文档中,则将是来自和_score的分数的组合title1title2

希望这可以帮助

于 2016-02-14T17:11:32.323 回答
2

most_fields 的一点注释 - 它使用两个字段的分数。并将其划分为字段计数

在您的示例中:(来自 title1 的得分 +来自 title2 的得分)/ 2

于 2017-06-13T19:38:03.733 回答