관련성 함수

관련성 함수 (Relevance functions)

관련성 기반 함수는 질의 관련성에 따라 인덱스에서 문서를 검색할 수 있게 해줘요. 이 함수들은 OpenSearch 엔진 검색 질의를 기반으로 하지만, 플러그인 내 메모리(in-memory) 실행은 지원되지 않아요.

이 함수들은 WHERE 또는 HAVING 절 안의 조건 표현식 같은 전역 질의 필터링에 사용할 수 있어요. 관련성 기반 검색에 대한 자세한 내용은 Relevance Based Search With SQL/PPL Query Engine 문서를 참고하세요.

출처: 문서

본문

MATCH

Usage: MATCH(<field_expression>, <query_expression>[, <option>=<option_value>]*)

OpenSearch 엔진의 match 질의에 매핑돼요. 지정된 필드가 제공된 텍스트, 숫자, 날짜, 또는 Boolean 값과 일치하는 문서를 반환해요.

Parameters:

  • <field_expression> (Required): 검색할 필드예요.

  • <query_expression> (Required): 일치시킬 텍스트, 숫자, 날짜, 또는 Boolean 값이에요.

Return type: BOOLEAN

Examples

다음 예시는 필수 파라미터만 사용하며, 모든 선택 파라미터는 기본값으로 두었어요.

source=accounts
| where match(address, 'Street')
| fields lastname, address

질의는 다음과 같은 결과를 반환해요.

lastname address
Bond 671 Bristol Street
Bates 789 Madison Street

다음 예시는 선택 파라미터에 사용자 지정 값을 설정하는 방법을 보여줘요.

source=accounts
| where match(firstname, 'Hattie', operator='AND', boost=2.0)
| fields lastname

질의는 다음과 같은 결과를 반환해요.

lastname
Bond

MATCH_PHRASE

Usage: MATCH_PHRASE(<field_expression>, <query_expression>[, <option>=<option_value>]*)

OpenSearch 엔진의 match_phrase 질의에 매핑돼요. 지정된 필드가 제공된 텍스트를 하나의 구(phrase)로 일치시키는 문서를 반환해요.

Parameters:

  • <field_expression> (Required): 검색할 필드예요.

  • <query_expression> (Required): 구로 일치시킬 텍스트예요.

Return type: BOOLEAN

이전 버전과의 호환성을 위해 matchphrase도 지원되며 match_phrase 질의에 매핑돼요.

Examples

다음 예시는 필수 파라미터만 사용하며, 모든 선택 파라미터는 기본값으로 두었어요.

source=books
| where match_phrase(author, 'Alexander Milne')
| fields author, title

질의는 다음과 같은 결과를 반환해요.

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

다음 예시는 선택 파라미터에 사용자 지정 값을 설정하는 방법을 보여줘요.

source=books
| where match_phrase(author, 'Alan Milne', slop = 2)
| fields author, title

질의는 다음과 같은 결과를 반환해요.

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

MATCH_PHRASE_PREFIX

Usage: MATCH_PHRASE_PREFIX(<field_expression>, <query_expression>[, <option>=<option_value>]*)

OpenSearch 엔진의 match_phrase_prefix 질의에 매핑돼요. 지정된 필드가 마지막 용어에 대한 접두사 일치를 사용해 제공된 텍스트와 일치하는 문서를 반환해요.

Parameters:

  • <field_expression> (Required): 검색할 필드예요.

  • <query_expression> (Required): 마지막 용어에 대한 접두사 일치를 사용해 일치시킬 텍스트예요.

Return type: BOOLEAN

Examples

다음 예시는 필수 파라미터만 사용하며, 모든 선택 파라미터는 기본값으로 두었어요.

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

다음 예시는 선택 파라미터에 사용자 지정 값을 설정하는 방법을 보여줘요.

source=books
| where match_phrase_prefix(author, 'Alan Mil', slop = 2)
| fields author, title

질의는 다음과 같은 결과를 반환해요.

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

MULTI_MATCH

Usage:

  • MULTI_MATCH([<field_expression+>], <query_expression>[, <option>=<option_value>]*).
  • MULTI_MATCH(<query_expression>[, <option>=<option_value>]*).

OpenSearch 엔진의 multi_match query에 매핑돼요. 하나 이상의 지정된 필드가 제공된 텍스트, 숫자, 날짜, 또는 Boolean 값과 일치하는 문서를 반환해요.

두 가지 문법 형식이 지원돼요:

  1. 명시적 필드 포함 (클래식 문법): multi_match([field_list], query, ...)
  2. 필드 없음 (검색 기본 필드): multi_match(query, ...)

필드를 생략하면 질의는 index.query.default_field 설정이 지정한 필드에서 검색해요.

^ 기호를 사용해 특정 필드에 부스트를 줄 수 있어요. 부스트는 한 필드의 일치 항목을 다른 필드의 일치 항목보다 비중 있게 가중하는 배수예요. 필드는 큰따옴표, 작은따옴표, 백틱, 또는 따옴표 없이 지정할 수 있어요. 또한 "*"를 사용해 모든 필드를 검색할 수 있어요(별표 기호는 반드시 따옴표로 감싸야 해요). 부스트 값은 선택 사항이며 필드 이름 뒤에 ^ 문자 또는 공백으로 구분해 지정해요.

  • multi_match(["Tags" ^ 2, 'Title' 3.4, Body, Comments ^ 0.3], ...).
  • multi_match(["*"], ...).
  • multi_match("search text", ...) (기본 필드를 검색해요).

Parameters:

  • <field_expression+> (Optional): 선택적 부스트 값을 포함한 검색 필드 목록이에요.

  • <query_expression> (Required): 일치시킬 텍스트, 숫자, 날짜, 또는 Boolean 값이에요.

Return type: BOOLEAN

Examples

다음 예시는 필수 파라미터만 사용한 명시적 필드 지정예요.

source=books
| where multi_match(['title'], 'Pooh House')
| fields id, title, author

질의는 다음과 같은 결과를 반환해요.

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

다음 예시는 선택 파라미터를 포함한 명시적 필드 지정예요.

source=books
| where multi_match(['title'], 'Pooh House', operator='AND', analyzer=default)
| fields id, title, author

질의는 다음과 같은 결과를 반환해요.

id title author
1 The House at Pooh Corner Alan Alexander Milne

다음 예시는 명시적 필드 지정 없이 기본 필드 문법을 사용해요.

source=books
| where multi_match('Pooh House')
| fields id, title, author

질의는 다음과 같은 결과를 반환해요.

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

SIMPLE_QUERY_STRING

Usage:

  • SIMPLE_QUERY_STRING([<field_expression+>], <query_expression>[, <option>=<option_value>]*).
  • SIMPLE_QUERY_STRING(<query_expression>[, <option>=<option_value>]*).

OpenSearch 엔진의 simple_query_string 질의에 매핑돼요. 하나 이상의 지정된 필드가 제공된 텍스트, 숫자, 날짜, 또는 Boolean 값과 일치하는 문서를 반환해요.

두 가지 문법 형식이 지원돼요:

  1. 명시적 필드 포함 (클래식 문법): simple_query_string([field_list], query, ...)
  2. 필드 없음 (검색 기본 필드): simple_query_string(query, ...)

필드를 생략하면 질의는 index.query.default_field 설정이 지정한 필드에서 검색해요.

^ 기호를 사용해 특정 필드에 부스트를 줄 수 있어요. 부스트는 한 필드의 일치 항목을 다른 필드의 일치 항목보다 비중 있게 가중하는 배수예요. 필드는 큰따옴표, 작은따옴표, 백틱, 또는 따옴표 없이 지정할 수 있어요. 또한 "*"를 사용해 모든 필드를 검색할 수 있어요(별표 기호는 반드시 따옴표로 감싸야 해요). 부스트 값은 선택 사항이며 필드 이름 뒤에 ^ 문자 또는 공백으로 구분해 지정해요.

  • simple_query_string(["Tags" ^ 2, 'Title' 3.4, Body, Comments ^ 0.3], ...).
  • simple_query_string(["*"], ...).
  • simple_query_string("search text", ...) (기본 필드를 검색해요).

Parameters:

  • <field_expression+> (Optional): 선택적 부스트 값을 포함한 검색 필드 목록이에요.

  • <query_expression> (Required): 일치시킬 텍스트, 숫자, 날짜, 또는 Boolean 값이에요.

Return type: BOOLEAN

Examples

다음 예시는 필수 파라미터만 사용한 명시적 필드 지정예요.

source=books
| where simple_query_string(['title'], 'Pooh House')
| fields id, title, author

질의는 다음과 같은 결과를 반환해요.

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

다음 예시는 선택 파라미터를 포함한 명시적 필드 지정예요.

source=books
| where simple_query_string(['title'], 'Pooh House', flags='ALL', default_operator='AND')
| fields id, title, author

질의는 다음과 같은 결과를 반환해요.

id title author
1 The House at Pooh Corner Alan Alexander Milne

다음 예시는 명시적 필드 지정 없이 기본 필드 문법을 사용해요.

source=books
| where simple_query_string('Pooh House')
| fields id, title, author

질의는 다음과 같은 결과를 반환해요.

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

MATCH_BOOL_PREFIX

Usage: MATCH_BOOL_PREFIX(<field_expression>, <query_expression>[, <option>=<option_value>]*)

OpenSearch 엔진의 match_bool_prefix 질의에 매핑돼요. 지정된 필드가 제공된 텍스트와 일치하는 문서를 반환하며, 마지막 용어를 제외한 모든 용어는 정확히 일치하고 마지막 용어는 접두사로 취급돼요.

Parameters:

  • <field_expression> (Required): 검색할 필드예요.

  • <query_expression> (Required): 일치시킬 텍스트로, 마지막 용어가 접두사로 취급돼요.

Return type: BOOLEAN

Examples

다음 예시는 필수 파라미터만 사용하며, 모든 선택 파라미터는 기본값으로 두었어요.

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

질의는 다음과 같은 결과를 반환해요.

firstname address
Hattie 671 Bristol Street
Nanette 789 Madison Street

다음 예시는 선택 파라미터를 설정하는 방법을 보여줘요.

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

질의는 다음과 같은 결과를 반환해요.

firstname address
Hattie 671 Bristol Street

QUERY_STRING

Usage:

  • QUERY_STRING([<field_expression+>], <query_expression>[, <option>=<option_value>]*).
  • QUERY_STRING(<query_expression>[, <option>=<option_value>]*).

OpenSearch 엔진의 query_string 질의에 매핑돼요. 하나 이상의 지정된 필드가 제공된 텍스트, 숫자, 날짜, 또는 Boolean 값과 일치하는 문서를 반환해요.

두 가지 문법 형식이 지원돼요:

  1. 명시적 필드 포함 (클래식 문법): query_string([field_list], query, ...)
  2. 필드 없음 (검색 기본 필드): query_string(query, ...)

필드를 생략하면 질의는 index.query.default_field 설정이 지정한 필드에서 검색해요.

^ 기호를 사용해 특정 필드에 부스트를 줄 수 있어요. 부스트는 한 필드의 일치 항목을 다른 필드의 일치 항목보다 비중 있게 가중하는 배수예요. 필드는 큰따옴표, 작은따옴표, 백틱, 또는 따옴표 없이 지정할 수 있어요. 또한 "*"를 사용해 모든 필드를 검색할 수 있어요(별표 기호는 반드시 따옴표로 감싸야 해요). 부스트 값은 선택 사항이며 필드 이름 뒤에 ^ 문자 또는 공백으로 구분해 지정해요.

  • query_string(["Tags" ^ 2, 'Title' 3.4, Body, Comments ^ 0.3], ...).
  • query_string(["*"], ...).
  • query_string("search text", ...) (기본 필드를 검색해요).

Parameters:

  • <field_expression+> (Optional): 선택적 부스트 값을 포함한 검색 필드 목록이에요.

  • <query_expression> (Required): 일치시킬 텍스트, 숫자, 날짜, 또는 Boolean 값이에요.

Return type: BOOLEAN

Examples

다음 예시는 필수 파라미터만 사용한 명시적 필드 지정예요.

source=books
| where query_string(['title'], 'Pooh House')
| fields id, title, author

질의는 다음과 같은 결과를 반환해요.

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

다음 예시는 선택 파라미터를 포함한 명시적 필드 지정예요.

source=books
| where query_string(['title'], 'Pooh House', default_operator='AND')
| fields id, title, author

질의는 다음과 같은 결과를 반환해요.

id title author
1 The House at Pooh Corner Alan Alexander Milne

다음 예시는 명시적 필드 지정 없이 기본 필드 문법을 사용해요.

source=books
| where query_string('Pooh House')
| fields id, title, author

질의는 다음과 같은 결과를 반환해요.

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

제한 사항 (Limitations)

관련성 함수는 메모리 내(in-memory)가 아니라 OpenSearch 질의 DSL에서만 실행돼요. 특히 관련성 함수가 복잡한 PPL 연산 뒤에 오는 경우, 질의가 DSL로 변환되기에 너무 복잡하면 관련성 검색이 실패할 수 있어요.

올바른 실행을 보장하려면 관련성 함수를 search 명령에 최대한 가깝게 배치하세요. 그러면 함수가 푸시다운 최적화 대상이 될 가능성이 높아져요.

문제가 되는 질의 구조 예시:

search source = people
| rename firstname as name
| dedup account_number
| fields name, account_number, balance, employer
| where match(employer, 'Open Search')
| stats count() by city

함수가 OpenSearch DSL에서 최적화되고 실행될 수 있도록 관련성 함수를 포함한 where 명령을 search 명령 바로 뒤에 배치하세요.

권장되는 질의 구조:

search source = people
| where match(employer, 'Open Search')
| rename firstname as name
| dedup account_number
| fields name, account_number, balance, employer
| stats count() by city

더 알아보기 (Learn more)