전문 검색(Full-text search)
전문 검색(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>]*)
다음 옵션을 순서에 관계없이 지정할 수 있어요.
analyzerauto_generate_synonyms_phrasefuzzinessmax_expansionsprefix_lengthfuzzy_transpositionsfuzzy_rewritelenientoperatorminimum_should_matchzero_terms_queryboost
매개변수 설명과 지원 값은 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에 대해 다음 옵션을 순서에 관계없이 지정할 수 있어요.
analyzerauto_generate_synonyms_phrasecutoff_frequencyfuzzinessfuzzy_transpositionslenientmax_expansionsminimum_should_matchoperatorprefix_lengthtie_breakertypeslopzero_terms_queryboost
매개변수 설명과 지원 값은 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에 대해 다음 옵션을 순서에 관계없이 지정할 수 있어요.
analyzerallow_leading_wildcardanalyze_wildcardauto_generate_synonyms_phrase_queryboostdefault_operatorenable_position_incrementsfuzzinessfuzzy_rewriteescapefuzzy_max_expansionsfuzzy_prefix_lengthfuzzy_transpositionslenientmax_determinized_statesminimum_should_matchquote_analyzerphrase_slopquote_field_suffixrewritetypetie_breakertime_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 함수는 다음 옵션을 순서에 관계없이 지정할 수 있게 해줘요.
analyzerslopzero_terms_queryboost
매개변수 설명과 지원 값은 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_wildcardanalyzerauto_generate_synonyms_phrase_queryboostdefault_operatorflagsfuzzy_max_expansionsfuzzy_prefix_lengthfuzzy_transpositionslenientminimum_should_matchquote_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 함수는 다음 옵션을 순서에 관계없이 지정할 수 있게 해줘요.
analyzerslopmax_expansionszero_terms_queryboost
매개변수 설명과 지원 값은 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_matchfuzzinessprefix_lengthmax_expansionsfuzzy_transpositionsfuzzy_rewriteboostanalyzeroperator
매개변수 설명과 지원 값은 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 |