Elasticsearch Elasticsearch Multi_Match

By Opster Team

Updated: Aug 28, 2023

| 2 min read

If you want to learn more about Elasticsearch Match, Multi-Match, and Match Phrase queries, check out this guide.

Quick Links

Introduction 

Elasticsearch’s multi-match query is a versatile tool that allows you to execute a search across multiple fields. It is a powerful query type that provides flexibility and precision in retrieving data. This article will delve into the intricacies of multi-match queries, their types, and how to use them effectively.

Multi-match query syntax

Multi-match queries are an extension of the match query, but instead of operating on a single field, they operate on multiple fields. The syntax for a multi-match query is as follows:

GET /_search
{
  "query": {
    "multi_match" : {
      "query":    "quick brown fox",
      "fields": [ "field1", "field2" ]
    }
  }
}

In this example, Elasticsearch will search for the tokens “quick brown fox” in both “field1” and “field2”. 

Types of multi-match queries

There are several types of multi-match queries that you can use depending on your specific needs: `best_fields`, `most_fields`, `cross_fields`, `phrase`, and `phrase_prefix`.

1. `best_fields`: This is the default type. It is useful when you are searching for something that should match a single field. For example, when searching for a product by name, you would use the `best_fields` type. The _score of the best matching field is used.

2. `most_fields`: This type is useful when you want to match as many fields as possible. It is often used when searching for the same term in different fields. The _score of all matching fields are combined together.

3. `cross_fields`: This type is useful when you want to match the search terms across several fields. For example, if you have a person’s first name in one field and their last name in another, a `cross_fields` search would allow you to find that person using their full name.

4. `phrase` and `phrase_prefix`: These types are used when you want to match a phrase or a prefix of a phrase. They are useful for autocomplete functionality.

5. bool_prefix: This type is useful when you want the terms to match in any position within the text, while requiring the last term to match as a prefix. This is similar to phrase_prefix, but without any constraints on the positioning of the terms.

Specifying the type in the query

The type of multi-match query can be specified in the query itself, like so:

GET /_search
{
  "query": {
    "multi_match" : {
      "query":    "quick brown fox",
      "type":     "best_fields",
      "fields": [ "field1", "field2" ]
    }
  }
}

Additional parameters in the query

In addition to the type, you can also specify other parameters such as `operator` and `minimum_should_match`. The `operator` parameter can be `and` or `or` and determines whether all or any of the terms must be matched. The `minimum_should_match` parameter specifies the minimum number of terms that must match.

GET /_search
{
  "query": {
    "multi_match" : {
      "query":    "quick brown fox",
      "type":     "best_fields",
      "fields": [ "field1", "field2" ],
      "operator": "and",
      "minimum_should_match": "66%"
    }
  }
}

In this example, at least two out of three terms should match for each field. For instance, a document would match if `field1` contains both `quick` and `brown` and `field2` contains both `brown` and `fox`.