WARNING: The 2.x versions of Elasticsearch have passed their EOL dates. If you are running a 2.x version, we strongly advise you to upgrade.
This documentation is no longer maintained and may be removed. For the latest information, see the current Elasticsearch documentation.
Mixing It Up
editMixing It Up
editRequiring exact-phrase matches may be too strict a constraint. Perhaps we do want documents that contain “quick brown fox” to be considered a match for the query “quick fox,” even though the positions aren’t exactly equivalent.
We can introduce a degree of flexibility into phrase matching by using the
slop
parameter:
GET /my_index/my_type/_search { "query": { "match_phrase": { "title": { "query": "quick fox", "slop": 1 } } } }
The slop
parameter tells the match_phrase
query how far apart terms are
allowed to be while still considering the document a match. By how far
apart we mean how many times do you need to move a term in order to make
the query and document match?
We’ll start with a simple example. To make the query quick fox
match
a document containing quick brown fox
we need a slop
of just 1
:
Pos 1 Pos 2 Pos 3 ----------------------------------------------- Doc: quick brown fox ----------------------------------------------- Query: quick fox Slop 1: quick ↳ fox
Although all words need to be present in phrase matching, even when using slop
,
the words don’t necessarily need to be in the same sequence in order to
match. With a high enough slop
value, words can be arranged in any order.
To make the query fox quick
match our document, we need a slop
of 3
:
Pos 1 Pos 2 Pos 3 ----------------------------------------------- Doc: quick brown fox ----------------------------------------------- Query: fox quick Slop 1: fox|quick ↵ Slop 2: quick ↳ fox Slop 3: quick ↳ fox