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 Upedit
Requiring 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