Let’s say I
am maintaining an index ‘book’, and type ‘philosophy’ to store all philosophy books.
PUT /_bulk {"create" : {"_index" : "books", "_type":"philosophy", "_id" : 1}} {"title" : "Autobiography of Osho", "description" : "A professor of philosophy, he travelled throughout India during the 1960s as a public speaker. His outspoken criticism of politicians and the political mind, Mahatma Gandhi and institutionalised religion made him controversial."} {"create" : {"_index" : "books", "_type":"philosophy", "_id" : 2}} {"title" : "Osho philosophy", "description" : "Osho Autobiography is a book on philosophy. Osho travelled throughout India during the 1960s as a public speaker. Osho outspoken criticism of politicians and the political mind, Mahatma Gandhi and institutionalised religion made him controversial.Osho written many books on philosophy."}
I want to
search for a book on “Osho Autobiography”, my query looks like below.
GET /books/philosophy/_search { "query":{ "bool" :{ "should": [ {"match" : {"title" : "Osho Autobiography"}}, {"match" : {"description" : "Osho Autobiography"}} ] } } }
You will get
following kind of response.
{ "took": 1, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 2, "max_score": 0.061475925, "hits": [ { "_index": "books", "_type": "philosophy", "_id": "2", "_score": 0.061475925, "_source": { "title": "Osho philosophy", "description": "Osho Autobiography is a book on philosophy. Osho travelled throughout India during the 1960s as a public speaker. Osho outspoken criticism of politicians and the political mind, Mahatma Gandhi and institutionalised religion made him controversial.Osho written many books on philosophy." } }, { "_index": "books", "_type": "philosophy", "_id": "1", "_score": 0.03182549, "_source": { "title": "Autobiography of Osho", "description": "A professor of philosophy, he travelled throughout India during the 1960s as a public speaker. His outspoken criticism of politicians and the political mind, Mahatma Gandhi and institutionalised religion made him controversial." } } ] } }
As you
observe the results “Osho philosophy” book comes first than the book “Autobiography
of Osho”. This is because “bool” query works like below.
{ "query" : { "bool" : { "should" : [ {"match" : {"title" : "Osho Autobiography"}}, {"match" : {"description" : "Osho Autobiography"}} ] } } }
1.
“bool”
query runs both of the queries in should clause.
2.
Adds
scores together.
3.
Multiplies
total by number of matching clauses.
4.
Divides
the result by total number of clauses (2 clauses here).
As you
observe document 2 contains the word “Osho” in both fields “title”,
“description”. But document1 don’t
contain the word “Osho” in its description. So document 2 comes before document
1. But document 1 is the book on “osho autobiography”. It should come before
document 2.
In the cases
like above “dis_max” query is useful. It returns documents that match any of
these queries, and return the score of the best matching query
GET /books/philosophy/_search { "query":{ "dis_max" :{ "queries": [ {"match" : {"title" : "Osho Autobiography"}}, {"match" : {"description" : "Osho Autobiography"}} ] } } }
You will get
following response.
{ "took": 4, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 2, "max_score": 0.06658022, "hits": [ { "_index": "books", "_type": "philosophy", "_id": "1", "_score": 0.06658022, "_source": { "title": "Autobiography of Osho", "description": "A professor of philosophy, he travelled throughout India during the 1960s as a public speaker. His outspoken criticism of politicians and the political mind, Mahatma Gandhi and institutionalised religion made him controversial." } }, { "_index": "books", "_type": "philosophy", "_id": "2", "_score": 0.03842633, "_source": { "title": "Osho philosophy", "description": "Osho Autobiography is a book on philosophy. Osho travelled throughout India during the 1960s as a public speaker. Osho outspoken criticism of politicians and the political mind, Mahatma Gandhi and institutionalised religion made him controversial.Osho written many books on philosophy." } } ] } }
No comments:
Post a Comment