Introduction
When querying Elasticsearch, it’s often necessary to perform exact match searches to retrieve specific documents that match a given criterion. In this article, we will discuss various techniques and best practices for exact match searches in Elasticsearch. If you want to learn about Elasticsearch match, multi-match, and match phrase queries, check out this guide. You should also take a look at this guide, which contains a detailed explanation on Elasticsearch match_only_text field type (for storage optimization).
Elasticsearch Exact Match: Techniques and Best Practices
1. Keyword Data Type
For exact match searches, it’s essential to use the keyword data type for the fields you want to query. The keyword data type is not analyzed, which means the field’s value remains unchanged during indexing. This allows for exact match searches without worrying about tokenization or normalization.
Example mapping:
{ "mappings": { "properties": { "title": { "type": "text", "fields": { "keyword": { "type": "keyword" } } } } } }
2. Term Query
The term query is the most straightforward way to perform an exact match search. It looks for the exact term in the field without any analysis. Use the term query with the keyword field to retrieve documents that match the given value.
Example query:
{ "query": { "term": { "title.keyword": "Elasticsearch Exact Match" } } }
3. Match Query with Operator
The match query is typically used for full-text search, but you can also use it for exact match searches by setting the “operator” parameter to “and”. This ensures that all terms in the query must be present in the field for a document to be considered a match.
Example query:
{ "query": { "match": { "title": { "query": "Elasticsearch Exact Match", "operator": "and" } } } }
4. Phrase Query
A phrase query can also be used for exact match searches by searching for the exact sequence of terms in the field. This is particularly useful when you need to match a specific phrase or sequence of words.
Example query:
{ "query": { "match_phrase": { "title": "Elasticsearch Exact Match" } } }
5. Filter Context
When performing exact match searches, it’s recommended to use a filter context instead of a query context. This improves performance as filters are cached and do not contribute to the relevance score calculation.
Example query:
{ "query": { "bool": { "filter": { "term": { "title.keyword": "Elasticsearch Exact Match" } } } } }
Conclusion
In conclusion, there are several techniques for exact match searches in Elasticsearch. By using the keyword data type, term query, match query with AND operator, phrase query, and filter context, you can efficiently perform exact match searches and retrieve the desired documents.