I am trying to understand how dis_max query works by trying the documentation example: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-dis-max-query.html
Specifically, I want to reproduce the documentation which says: "ensure that "albino" matching one field and "elephant" matching another gets a higher score than "albino" matching both fields. To get this result, use both Boolean Query and DisjunctionMax Query."
Here is my corpus:
PUT ae1/docs/1 { "title":"albino", "body":"elephant" } PUT ae1/docs/2 { "title":"albino", "body":"albino" }
So, according to the documentation, I want document 1 to rank higher than document 2.
I now understand how it works. The following query works as expected:
GET ae1/docs/_search?search_type=dfs_query_then_fetch { "query": { "bool": { "should": [ { "dis_max": { "tie_breaker": 0.7, "boost": 1.2, "queries": [ {"match": {"title": "albino"}}, {"match": {"body": "albino"}} ] } }, { "dis_max": { "tie_breaker": 0.7, "boost": 1.2, "queries": [ {"match": {"title": "elephant"}}, {"match": {"body": "elephant"}} ] } } ] } } }
The results are:
{ "took": 1, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": 2, "max_score": 1.0505626, "hits": [ { "_index": "ae1", "_type": "docs", "_id": "1", "_score": 1.0505626, "_source": { "title": "albino", "body": "elephant" } }, { "_index": "ae1", "_type": "docs", "_id": "2", "_score": 0.9849268, "_source": { "title": "albino", "body": "albino" } } ] } }