전문 검색(Full-text search)

전문 검색을 위해 SQL 명령을 사용해요. SQL 플러그인은 OpenSearch에서 사용할 수 있는 전문 쿼리의 일부를 지원해요. OpenSearch의 전문 쿼리에 대해 자세히 알아보려면 Full-text queries를 참조해요.

출처: 문서

본문

Match

MATCH 함수를 사용하여 주어진 필드의 string, number, date, boolean 값과 일치하는 문서를 검색해요.

구문(Syntax)

match(field_expression, query_expression[, option=<option_value>]*)

다음 옵션을 순서에 관계없이 지정할 수 있어요.

  • analyzer
  • auto_generate_synonyms_phrase
  • fuzziness
  • max_expansions
  • prefix_length
  • fuzzy_transpositions
  • fuzzy_rewrite
  • lenient
  • operator
  • minimum_should_match
  • zero_terms_query
  • boost

매개변수 설명과 지원 값은 match 쿼리 문서를 참조해요.

예시 1: message 필드에서 “this is a test” 텍스트 검색:

GET my_index/_search
{
  "query": {
    "match": {
      "message": "this is a test"
    }
  }
}

SQL 쿼리:

SELECT message FROM my_index WHERE match(message, "this is a test")

PPL 쿼리:

SOURCE=my_index | WHERE match(message, "this is a test") | FIELDS message

예시 2: operator 매개변수로 message 필드 검색:

GET my_index/_search
{
  "query": {
    "match": {
      "message": {
        "query": "this is a test",
        "operator": "and"
      }
    }
  }
}

SQL 쿼리:

SELECT message FROM my_index WHERE match(message, "this is a test", operator='and')

PPL 쿼리:

SOURCE=my_index | WHERE match(message, "this is a test", operator='and') | FIELDS message

예시 3: operator 및 zero_terms_query 매개변수로 message 필드 검색:

GET my_index/_search
{
  "query": {
    "match": {
      "message": {
        "query": "to be or not to be",
        "operator": "and",
        "zero_terms_query": "all"
      }
    }
  }
}

SQL 쿼리:

SELECT message FROM my_index WHERE match(message, "this is a test", operator='and', zero_terms_query='all')

PPL 쿼리:

SOURCE=my_index | WHERE match(message, "this is a test", operator='and', zero_terms_query='all') | FIELDS message

Multi-match

여러 필드에서 텍스트를 검색하려면 MULTI_MATCH 함수를 사용해요. 이 함수는 검색 엔진에서 사용되는 multi_match 쿼리에 매핑되어, 제공된 텍스트, 숫자, 날짜 또는 Boolean 값과 주어진 필드(들)가 일치하는 문서를 반환해요.

구문(Syntax)

MULTI_MATCH 함수는 ^ 문자를 사용해 특정 필드를 부스트(boost)해요. 부스트는 한 필드의 일치 항목을 다른 필드의 일치 항목보다 더 중요하게 가중치를 두는 승수예요. 구문은 필드를 큰따옴표, 작은따옴표, 백틱으로 지정하거나 따옴표 없이 지정하는 것을 지원해요. 모든 필드를 검색하려면 별표 "*"를 사용해요. 별표 기호는 따옴표로 감싸야 해요.

multi_match([field_expression+], query_expression[, option=<option_value>]*)

가중치는 선택 사항이며 필드 이름 뒤에 지정해요. caret 문자(^)나 공백으로 구분할 수 있어요. 다음 예시를 참조해요.

multi_match(["Tags" ^ 2, 'Title' 3.4, `Body`, Comments ^ 0.3], ...)
multi_match(["*"], ...)

MULTI_MATCH에 대해 다음 옵션을 순서에 관계없이 지정할 수 있어요.

  • analyzer
  • auto_generate_synonyms_phrase
  • cutoff_frequency
  • fuzziness
  • fuzzy_transpositions
  • lenient
  • max_expansions
  • minimum_should_match
  • operator
  • prefix_length
  • tie_breaker
  • type
  • slop
  • zero_terms_query
  • boost

매개변수 설명과 지원 값은 multi_match 쿼리 문서를 참조해요.

예: firstname 또는 lastname 필드에서 Dale을 검색하는 REST API 검색:

GET accounts/_search
{
  "query": {
    "multi_match": {
      "query": "Lane Street",
      "fields": [ "address" ],
    }
  }
}

SQL에서 multi_match 함수로 호출할 수 있어요.

SELECT firstname, lastname
FROM accounts
WHERE multi_match(['*name'], 'Dale')

또는 multi_match PPL 함수:

SOURCE=accounts | WHERE multi_match(['*name'], 'Dale') | fields firstname, lastname

이 쿼리는 다음과 같은 결과를 반환해요.

firstname lastname
Dale Adams

Query string

연산자에 따라 텍스트를 분할하려면 QUERY_STRING 함수를 사용해요. QUERY_STRING 함수는 논리 연결자, 와일드카드, 정규식, 근접 검색을 지원해요. 이 함수는 검색 엔진에서 사용되는 query_string 쿼리에 매핑되어, 제공된 텍스트, 숫자, 날짜 또는 Boolean 값과 주어진 필드(들)가 일치하는 문서를 반환해요.

구문(Syntax)

QUERY_STRING 함수는 MATCH_QUERY와 유사한 구문을 가지며 ^ 문자를 사용해 특정 필드를 부스트해요. 부스트는 한 필드의 일치 항목을 다른 필드의 일치 항목보다 더 중요하게 가중치를 두는 승수예요. 구문은 필드를 큰따옴표, 작은따옴표, 백틱으로 지정하거나 따옴표 없이 지정하는 것을 지원해요. 모든 필드를 검색하려면 별표 "*"를 사용해요. 별표 기호는 따옴표로 감싸야 해요.

query_string([field_expression+], query_expression[, option=<option_value>]*)

가중치는 선택 사항이며 필드 이름 뒤에 지정해요. caret 문자(^)나 공백으로 구분할 수 있어요. 다음 예시를 참조해요.

query_string(["Tags" ^ 2, 'Title' 3.4, `Body`, Comments ^ 0.3], ...)
query_string(["*"], ...)

QUERY_STRING에 대해 다음 옵션을 순서에 관계없이 지정할 수 있어요.

  • analyzer
  • allow_leading_wildcard
  • analyze_wildcard
  • auto_generate_synonyms_phrase_query
  • boost
  • default_operator
  • enable_position_increments
  • fuzziness
  • fuzzy_rewrite
  • escape
  • fuzzy_max_expansions
  • fuzzy_prefix_length
  • fuzzy_transpositions
  • lenient
  • max_determinized_states
  • minimum_should_match
  • quote_analyzer
  • phrase_slop
  • quote_field_suffix
  • rewrite
  • type
  • tie_breaker
  • time_zone

매개변수 설명과 지원 값은 query_string 쿼리 문서를 참조해요.

SQL 및 PPL 쿼리에서 query_string 사용 예:

REST API 검색 요청

GET accounts/_search
{
  "query": {
    "query_string": {
      "query": "Lane Street",
      "fields": [ "address" ],
    }
  }
}

SQL에서 호출할 수 있어요.

SELECT account_number, address
FROM accounts
WHERE query_string(['address'], 'Lane Street', default_operator='OR')

또는 PPL에서:

SOURCE=accounts | WHERE query_string(['address'], 'Lane Street', default_operator='OR') | fields account_number, address

이 쿼리는 다음과 같은 결과를 반환해요.

account_number address
1 880 Holmes Lane
6 671 Bristol Street
13 789 Madison Street

Match phrase

정확한 구문을 검색하려면 MATCHPHRASE 또는 MATCH_PHRASE 함수를 사용해요.

구문(Syntax)

matchphrasequery(field_expression, query_expression)
matchphrase(field_expression, query_expression[, option=<option_value>]*)
match_phrase(field_expression, query_expression[, option=<option_value>]*)

MATCHPHRASE/MATCH_PHRASE 함수는 다음 옵션을 순서에 관계없이 지정할 수 있게 해줘요.

  • analyzer
  • slop
  • zero_terms_query
  • boost

매개변수 설명과 지원 값은 match_phrase 쿼리 문서를 참조해요.

SQL 및 PPL 쿼리에서 match_phrase 사용 예:

REST API 검색 요청

GET accounts/_search
{
  "query": {
    "match_phrase": {
      "address": {
        "query": "880 Holmes Lane"
      }
    }
  }
}

SQL에서 호출할 수 있어요.

SELECT account_number, address
FROM accounts
WHERE match_phrase(address, '880 Holmes Lane')

또는 PPL:

SOURCE=accounts | WHERE match_phrase(address, '880 Holmes Lane') | FIELDS account_number, address

이 쿼리는 다음과 같은 결과를 반환해요.

account_number address
1 880 Holmes Lane

Simple query string

simple_query_string 함수는 OpenSearch의 simple_query_string 쿼리에 매핑돼요. 제공된 텍스트, 숫자, 날짜 또는 Boolean 값과 주어진 필드(들)가 일치하는 문서를 반환해요. **^**를 사용하면 특정 필드를 부스트할 수 있어요. 부스트는 한 필드의 일치 항목을 다른 필드의 일치 항목보다 더 중요하게 가중치를 두는 승수예요.

구문(Syntax)

구문은 필드를 큰따옴표, 작은따옴표, 백틱으로 지정하거나 따옴표 없이 지정하는 것을 지원해요. 모든 필드를 검색하려면 별표 "*"를 사용해요. 별표 기호는 따옴표로 감싸야 해요.

simple_query_string([field_expression+], query_expression[, option=<option_value>]*)

가중치는 선택 사항이며 필드 이름 뒤에 지정해요. caret 문자(^)나 공백으로 구분할 수 있어요. 다음 예시를 참조해요.

simple_query_string(["Tags" ^ 2, 'Title' 3.4, `Body`, Comments ^ 0.3], ...)
simple_query_string(["*"], ...)

SIMPLE_QUERY_STRING에 대해 다음 옵션을 순서에 관계없이 지정할 수 있어요.

  • analyze_wildcard
  • analyzer
  • auto_generate_synonyms_phrase_query
  • boost
  • default_operator
  • flags
  • fuzzy_max_expansions
  • fuzzy_prefix_length
  • fuzzy_transpositions
  • lenient
  • minimum_should_match
  • quote_field_suffix

매개변수 설명과 지원 값은 simple_query_string 쿼리 문서를 참조해요.

SQL 및 PPL 쿼리에서 simple_query_string 사용 예:

REST API 검색 요청

GET accounts/_search
{
  "query": {
    "simple_query_string": {
      "query": "Lane Street",
      "fields": [ "address" ],
    }
  }
}

SQL에서 호출할 수 있어요.

SELECT account_number, address
FROM accounts
WHERE simple_query_string(['address'], 'Lane Street', default_operator='OR')

또는 PPL에서:

SOURCE=accounts | WHERE simple_query_string(['address'], 'Lane Street', default_operator='OR') | fields account_number, address

이 쿼리는 다음과 같은 결과를 반환해요.

account_number address
1 880 Holmes Lane
6 671 Bristol Street
13 789 Madison Street

Match phrase prefix

주어진 접두어로 구문을 검색하려면 MATCH_PHRASE_PREFIX 함수를 사용해 쿼리 문자열의 마지막 용어로 접두어 쿼리를 만들어요.

구문(Syntax)

match_phrase_prefix(field_expression, query_expression[, option=<option_value>]*)

MATCH_PHRASE_PREFIX 함수는 다음 옵션을 순서에 관계없이 지정할 수 있게 해줘요.

  • analyzer
  • slop
  • max_expansions
  • zero_terms_query
  • boost

매개변수 설명과 지원 값은 match_phrase_prefix 쿼리 문서를 참조해요.

SQL 및 PPL 쿼리에서 match_phrase_prefix 사용 예:

REST API 검색 요청

GET accounts/_search
{
  "query": {
    "match_phrase_prefix": {
      "author": {
        "query": "Alexander Mil"
      }
    }
  }
}

SQL에서 호출할 수 있어요.

SELECT author, title
FROM books
WHERE match_phrase_prefix(author, 'Alexander Mil')

또는 PPL:

source=books | where match_phrase_prefix(author, 'Alexander Mil') | fields author, title

이 쿼리는 다음과 같은 결과를 반환해요.

author title
Alan Alexander Milne The House at Pooh Corner
Alan Alexander Milne Winnie-the-Pooh

Match Boolean prefix

match_bool_prefix 함수를 사용하여 주어진 필드 접두어에 대해 텍스트만 일치하는 문서를 검색해요.

구문(Syntax)

match_bool_prefix(field_expression, query_expression[, option=<option_value>]*)

MATCH_BOOL_PREFIX 함수는 다음 옵션을 순서에 관계없이 지정할 수 있게 해줘요.

  • minimum_should_match
  • fuzziness
  • prefix_length
  • max_expansions
  • fuzzy_transpositions
  • fuzzy_rewrite
  • boost
  • analyzer
  • operator

매개변수 설명과 지원 값은 match_bool_prefix 쿼리 문서를 참조해요.

SQL 및 PPL 쿼리에서 match_bool_prefix 사용 예:

REST API 검색 요청

GET accounts/_search
{
  "query": {
    "match_bool_prefix": {
      "address": {
        "query": "Bristol Stre"
      }
    }
  }
}

SQL에서 호출할 수 있어요.

SELECT firstname, address
FROM accounts
WHERE match_bool_prefix(address, 'Bristol Stre')

또는 PPL:

source=accounts | where match_bool_prefix(address, 'Bristol Stre') | fields firstname, address

이 쿼리는 다음과 같은 결과를 반환해요.

firstname address
Hattie 671 Bristol Street
Nanette 789 Madison Street

더 알아보기 (Learn more)