2.X/2. Search in Depth

2-3-05. multi_match Query

drscg 2017. 9. 30. 00:45

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

multi_match query는, 여러 field에 동일한 query를 실행하는, 아주 편리한 query이다.

Note

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 Databest_fieldsmost_fields, and cross_fields.

multi_match query는 여러 가지 형태가 있다. Know Your Data에서 나열한 세가지 시나리오와 일치하는, 3가지(best fieldsmost fieldscross fields)이다.

By default, this query 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

기본적으로, multi_match query는 best field 형태로 실행한다. 즉, 각 field에 대해 match query를 생성하고, 그것을 dis_max query로 감싼다. 이 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 follows:

아래처럼, multi_match query로 요약해서 다시 작성될 수 있다.

{
    "multi_match": {
        "query":                "Quick brown fox",
        "type":                 "best_fields", 
        "fields":               [ "title", "body" ],
        "tie_breaker":          0.3,
        "minimum_should_match": "30%" 
    }
}

best field 형태는 기본이고, 생략할 수 있다.

minimum_should_match 또는 operator 같은 매개변수는 생성된 match query에 전달된다.

Using Wildcards in Field Namesedit

Field names can be specified with wildcards: any field that matches the wildcard pattern will be included in the search. You could match on the book_titlechapter_title, and section_titlefields, with the following:

field 이름은 wildcard로 지정될 수 있다. wildcard pattern에 일치하는, 모든 field는 검색에 포함된다. book_titlechapter_titlesection_title 을 다음과 같이 일치시킬 수 있다.

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

Boosting Individual Fieldsedit

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

개별 field에, caret(^)을 사용해, 가중치를 부여할 수 있다. field 이름 뒤에 ^boost 를 추가하면 된다. boost 는 부동 소수점 숫자이다.

{
    "multi_match": {
        "query":  "Quick brown fox",
        "fields": [ "*_title", "chapter_title^2" ] 
    }
}

chapter_title field는 2 라는 boost 를 가지고 있다. 반면에, book_titlesection_title 은 기본 가중치인 1 을 가진다.


'2.X > 2. Search in Depth' 카테고리의 다른 글

2-3-03. Best Fields  (0) 2017.09.30
2-3-04. Tuning Best Fields Queries  (0) 2017.09.30
2-3-06. Most Fields  (0) 2017.09.30
2-3-07. Cross-fields Entity Search  (0) 2017.09.30
2-3-08. Field-Centric Queries  (0) 2017.09.28