elasticsearch best_field和most_field之间的区别是什么

mic*_*lam 7 elasticsearch elasticsearch-2.0

我已经准备好这篇文章 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"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

第二

get blablabla/_search
{
  "query" : {
    "multi_match": {
      "query": "games usa",
      "fields": ["title1", "title2"],
      "type": "most_fields"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

获取title1或title2字段中包含(游戏)或(美国)或(游戏和美国)单词的文档.

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

我可以请求帮助吗?

(我在弹性搜索2.2)

Ric*_*cha 14

无论何时执行搜索操作Elastic Search,都会计算每个匹配文档的相关性.根据文档 -

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

根据你上面提到的例子

GET blablabla/_search
{
"query": {
"multi_match": {
  "query": "games usa",
  "fields": ["title1", "title2"],
  "type": "best_fields"
   }
  }
}
Run Code Online (Sandbox Code Playgroud)

这个查询就会发现其中包含的文件games 和/或 usatitle1title2不过_score会从计算出单个最佳匹配字段.例如-

  • 如果title1包含gamestitle2包含games usa在同一个文档中,那么_score将是一个title2.
  • best_fields 当您搜索在同一字段中找到的多个单词时,它非常有用.

most_fields:

GET blablabla/_search
{ 
"query" : {
"multi_match": {
  "query": "games usa",
  "fields": ["title1", "title2"],
  "type": "most_fields"
   }
  }
}
Run Code Online (Sandbox Code Playgroud)

这个查询就会发现其中包含的文件games 和/或 usatitle1title2不过_score会从所有字段的组合来计算.例如-

  • 如果title1包含gamestitle2包含games usa在同一文档中,则将_score来自title1和的分数组合title2

希望这可以帮助

  • 非常好的解释 (2认同)