A user's search input does not have to be modelled as a single query clause.
Often it's beneficial to try several different interpretations of their input in a single search request using an array of queries in the should
clause of a containing bool
query. The more clauses that match a should array, the better the score.
You could try (in reverse order of importance):
- An exact-match phrase query on full-words
- An exact match query on full words
- An partial match query using n-grams.
Currently you are are only doing 3). If you also index minus the n-grams you can do 2) as well and give an extra boost to a match on that query using the boost
parameter. If someone search for irish bar
then 1) would help rank matches better too.