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`.


Opster
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.