Skip to content

Latest commit

 

History

History
98 lines (82 loc) · 2.68 KB

25_Multi_match_query.asciidoc

File metadata and controls

98 lines (82 loc) · 2.68 KB

multi_match query

The multi_match query provides us with a convenient shorthand way of running the same query against multiple fields.

There are several `types'' of `multi_match query, three of which just happen to coincide with the three scenarios that we listed in [know-your-data]: best_fields, most_fields, and cross_fields.

By default it runs as type best_fields, which means that it generates a match query for each field and wraps them in a dis_max query. This dis_max query:

{
  "dis_max": {
    "queries":  [
      {
        "match": {
          "title": {
            "query": "Quick brown fox",
            "minimum_should_match": "30%"
          }
        }
      },
      {
        "match": {
          "body": {
            "query": "Quick brown fox",
            "minimum_should_match": "30%"
          }
        }
      },
    ],
    "tie_breaker": 0.3
  }
}

could be rewritten more concisely with multi_match as:

{
    "multi_match": {
        "query":                "Quick brown fox",
        "type":                 "best_fields", (1)
        "fields":               [ "title", "body" ],
        "tie_breaker":          0.3,
        "minimum_should_match": "30%" (2)
    }
}
  1. The best_fields type is the default and can be left out.

  2. Parameters like minimum_should_match or operator are passed through to the generated match queries.

Wildcards in field names

Field names can be specified with wildcards — any field which matches the wildcard pattern will be included in the search. You could match on the book_title, chapter_title and section_title fields, with the following:

{
    "multi_match": {
        "query":  "Quick brown fox",
        "fields": "*_title"
    }
}

Boosting individual fields

Individual fields can be boosted using the caret (^) syntax: just add ^boost after the field name, where boost is a floating point number:

{
    "multi_match": {
        "query":  "Quick brown fox",
        "fields": [ "*_title", "chapter_title^2" ] (1)
    }
}
  1. The chapter_title field has a boost of 2, while the book_title and section_title fields have a default boost of 1.