Elasticsearch Wildcard Query - Syntax, Example, and Tips

Pulse - Elasticsearch Operations Done Right

On this page

What it does Syntax Example Query Common Issues Best Practices Frequently Asked Questions

What it does

The Wildcard Query in Elasticsearch allows for flexible pattern matching using wildcard operators, and allows searching for documents that contain terms matching a specified pattern. It uses two wildcard operators:

  • *: Matches any number of characters (including zero)
  • ?: Matches any single character

Syntax

GET /_search
{
  "query": {
    "wildcard": {
      "field_name": {
        "value": "pattern*"
      }
    }
  }
}

For more details, refer to the official Elasticsearch documentation on Wildcard Query.

Example Query

GET /products/_search
{
  "query": {
    "wildcard": {
      "product_name": {
        "value": "iph*ne"
      }
    }
  }
}

This query will match documents where the product_name field contains terms like "iphone", "iphone 12", "iphone pro", etc.

Common Issues

  1. Performance: Wildcard queries, especially with leading wildcards, can be slow and resource-intensive.
  2. Case sensitivity: Wildcard queries are case-sensitive by default.
  3. Unexpected matches: Be cautious with patterns that might match unintended terms.

Best Practices

  1. Avoid using wildcards at the beginning of a pattern when possible, as it can significantly slow down the query.
  2. Consider using the case_insensitive parameter for case-insensitive matching.
  3. Use more specific patterns to improve performance and accuracy.
  4. For better performance on large datasets, consider using n-grams or edge n-grams instead of wildcard queries.

Frequently Asked Questions

Q: How can I make a wildcard query case-insensitive?
A: You can use the case_insensitive parameter set to true in your query:

{
  "wildcard": {
    "field": {
      "value": "pattern*",
      "case_insensitive": true
    }
  }
}

Q: Can I use multiple wildcards in a single pattern?
A: Yes, you can use multiple wildcards in a single pattern. For example, "a*b?c" is a valid pattern.

Q: How does wildcard query performance compare to regex query?
A: Wildcard queries are generally faster than regex queries, especially for simpler patterns. However, both can be slow for large datasets or complex patterns.

Q: Can I use wildcard queries on numeric fields?
A: Wildcard queries are designed for text fields. For numeric fields, consider using range queries or term queries instead.

Q: Is there a limit to the number of terms a wildcard query can match?
A: While there's no hard limit, matching too many terms can impact performance. It's best to use more specific patterns to limit the number of potential matches.

Subscribe to the Pulse Newsletter

Get early access to new Pulse features, insightful blogs & exclusive events , webinars, and workshops.