I am new to elastic search and I am confused between must and filter. I want to perform an and operation between my terms, so I did this
POST /xyz/_search
{ "query": { "bool": { "must": [ { "term": { "city": "city1" } }, { "term": { "saleType": "sale_type1" } } ] } } }
which gave me the required results matching both the terms, and on using filter like this
POST /xyz/_search
{ "query": { "bool": { "must": [ { "term": { "city": "city1" } } ], "filter": { "term": { "saleType": "sale_type1" } } } } }
I get the same result, so when should I use must and when should I use filter? What is the difference?
must means: Clauses that must match for the document to be included. should means: If these clauses match, they increase the _score ; otherwise, they have no effect. They are simply used to refine the relevance score for each document. Yes you can use multiple filters inside must .
Think of the Query DSL as an AST (Abstract Syntax Tree) of queries, consisting of two types of clauses: Leaf query clauses. Leaf query clauses look for a particular value in a particular field, such as the match , term or range queries. These queries can be used by themselves.
Frequently used filters will be cached automatically by Elasticsearch, to speed up performance. Filter context is in effect whenever a query clause is passed to a filter parameter, such as the filter or must_not parameters in the bool query, the filter parameter in the constant_score query, or the filter aggregation.
must
contributes to the score. In filter
, the score of the query is ignored.
In both must
and filter
, the clause(query) must appear in matching documents. This is the reason for getting same results.
You may check this link
Score
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.
A query clause generates a _score
for each document.
To know how score is calculated, refer this link
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With