Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

elasticsearch what is the difference between best_field and most_field

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)

like image 271
michael Salam Avatar asked Feb 14 '16 15:02

michael Salam


1 Answers

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

like image 162
Richa Avatar answered Oct 12 '22 20:10

Richa