elasticsearch what is the difference between best_field and most_field
Asked Answered
T

2

15

I already ready this article https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html

but couldn't figure it out myself.

lets have these two queries:

first

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

second

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

I think the first query means:

get documetns that contain (games) or (usa) or (games and usa) words in either the title1 or the title2 fields.

However, I don't know what does the second one mean.

may i ask for help please?

(im on elasticsearch 2.2)

Taxidermy answered 14/2, 2016 at 15:59 Comment(0)
R
33

Whenever search operation is performed in Elastic Search, relevance of each matched document is calculated.According to th documentation-

The relevance score of each document is represented by a positive floating-point number called the _score. The higher the _score, the more relevant the document.

As per your examples mentioned above

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

This query will find the documents which contain games AND/OR usa in title1 or title2 but _score will be calculated from single best matching field. For example-

  • if title1 contains games and title2 contains games usa in the same document, then _score will be the one from title2.
  • best_fields is most useful when you are searching for multiple words best found in the same field.

In most_fields:

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

This query will find the documents which contain games AND/OR usa in title1 or title2 but _score will be calculated from the combination of all the fields. For example-

  • if title1 contains games and title2 contains games usa in the same document, then _score will be combination of scores from title1 and title2

Hope this helps

Ribband answered 14/2, 2016 at 17:11 Comment(2)
very nice explanationThrove
Very clear explanation @RibbandOlimpiaolin
F
3

A little remark for most_fields - it uses score from both fields. and divide it on fields count

In your example: ( Score from title1 + score from title2 ) / 2

Fridafriday answered 13/6, 2017 at 19:38 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.