SQL 함수
SQL 함수 (SQL functions)
SQL 언어는 관련성 검색(relevance search)을 포함한 모든 SQL 플러그인 공통 함수를 지원하면서, SQL에서만 사용할 수 있는 몇 가지 함수 동의어도 도입했어요. 이 동의어들은 V1 엔진에서 제공되며, 자세한 내용은 Limitations 문서를 참고하세요.
출처: 문서
본문
Match 질의
MATCHQUERY와 MATCH_QUERY 함수는 MATCH 관련성 함수의 동의어예요. 추가 인자를 받지는 않지만 대체 문법을 제공해요.
문법 (Syntax)
matchquery 또는 match_query를 사용하려면 검색 질의와 검색 대상 필드 이름을 전달하면 돼요.
match_query(field_expression, query_expression[, option=<option_value>]*)
matchquery(field_expression, query_expression[, option=<option_value>]*)
field_expression = match_query(query_expression[, option=<option_value>]*)
field_expression = matchquery(query_expression[, option=<option_value>]*)
다음 옵션을 순서에 상관없이 지정할 수 있어요.
analyzerboost
예시 (Example)
MATCHQUERY를 사용해 MATCH를 대체할 수 있어요.
SELECT account_number, address
FROM accounts
WHERE MATCHQUERY(address, 'Holmes')
또는 MATCH_QUERY를 사용해 MATCH를 대체할 수도 있어요.
SELECT account_number, address
FROM accounts
WHERE address = MATCH_QUERY('Holmes')
결과에는 address에 "Holmes"가 포함된 문서가 들어 있어요.
| account_number | address |
|---|---|
| 1 | 880 Holmes Lane |
Multi-match
MULTI_MATCH에는 각각 문법이 조금씩 다른 세 가지 동의어가 있어요. 이들은 질의 문자열과 가중치가 붙은 필드 목록을 받으며, 추가 선택적 파라미터도 받을 수 있어요.
문법 (Syntax)
multimatch('query'=query_expression[, 'fields'=field_expression][, option=<option_value>]*)
multi_match('query'=query_expression[, 'fields'=field_expression][, option=<option_value>]*)
multimatchquery('query'=query_expression[, 'fields'=field_expression][, option=<option_value>]*)
fields 파라미터는 선택 사항이며, 단일 필드 또는 쉼표로 구분된 목록을 담을 수 있어요(공백 문자는 허용되지 않아요). 각 필드의 가중치는 선택 사항이며 필드 이름 뒤에 지정해요. 가중치는 caret 문자 – ^ – 로 구분하며 공백 없이 작성해야 해요.
예시 (Example)
다음 질의는 단일 필드와 필드 목록을 가진 multi-match 질의의 fields 파라미터를 보여줘요.
multi_match('fields' = "Tags^2,Title^3.4,Body,Comments^0.3", ...)
multi_match('fields' = "Title", ...)
다음 옵션을 순서에 상관없이 지정할 수 있어요.
analyzerboostsloptypetie_breakeroperator
Query string
QUERY 함수는 QUERY_STRING의 동의어예요.
문법 (Syntax)
query('query'=query_expression[, 'fields'=field_expression][, option=<option_value>]*)
fields 파라미터는 선택 사항이며, 단일 필드 또는 쉼표로 구분된 목록을 담을 수 있어요(공백 문자는 허용되지 않아요). 각 필드의 가중치는 선택 사항이며 필드 이름 뒤에 지정해요. 가중치는 caret 문자 – ^ – 로 구분하며 공백 없이 작성해야 해요.
예시 (Example)
다음 질의는 단일 필드와 필드 목록을 가진 multi-match 질의의 fields 파라미터를 보여줘요.
query('fields' = "Tags^2,Title^3.4,Body,Comments^0.3", ...)
query('fields' = "Tags", ...)
다음 옵션을 순서에 상관없이 지정할 수 있어요.
analyzerboostslopdefault_field
SQL 및 PPL 질의에서 query_string 사용 예시
다음은 OpenSearch DSL의 REST API 검색 요청 예시예요.
GET accounts/_search
{
"query": {
"query_string": {
"query": "Lane Street",
"fields": [ "address" ],
}
}
}
앞의 요청은 다음 query 함수와 동등해요.
SELECT account_number, address
FROM accounts
WHERE query('address:Lane OR address:Street')
결과에는 "Lane" 또는 "Street"가 포함된 주소가 들어 있어요.
| account_number | address |
|---|---|
| 1 | 880 Holmes Lane |
| 6 | 671 Bristol Street |
| 13 | 789 Madison Street |
Match phrase
MATCHPHRASEQUERY 함수는 MATCH_PHRASE의 동의어예요.
문법 (Syntax)
matchphrasequery(query_expression, field_expression[, option=<option_value>]*)
다음 옵션을 순서에 상관없이 지정할 수 있어요.
analyzerboostslop
Score 질의
일치하는 모든 문서와 함께 관련성 점수(relevance score)를 반환하려면 SCORE, SCOREQUERY, 또는 SCORE_QUERY 함수를 사용하세요.
문법 (Syntax)
SCORE 함수는 두 개의 인자를 기대해요. 첫 번째 인자는 MATCH_QUERY 표현식이고, 두 번째 인자는 점수를 높이기 위한 선택적 부동소수점 숫자예요(기본값은 1.0).
SCORE(match_query_expression, score)
SCOREQUERY(match_query_expression, score)
SCORE_QUERY(match_query_expression, score)
예시 (Example)
다음 예시는 SCORE 함수를 사용해 문서들의 점수를 높여요.
SELECT account_number, address, _score
FROM accounts
WHERE SCORE(MATCH_QUERY(address, 'Lane'), 0.5) OR
SCORE(MATCH_QUERY(address, 'Street'), 100)
ORDER BY _score
결과에는 해당 점수와 함께 일치 항목이 들어 있어요.
| account_number | address | score |
|---|---|---|
| 1 | 880 Holmes Lane | 0.5 |
| 6 | 671 Bristol Street | 100 |
| 13 | 789 Madison Street | 100 |
Wildcard 질의
주어진 와일드카드로 문서를 검색하려면 WILDCARDQUERY 또는 WILDCARD_QUERY 함수를 사용하세요.
문법 (Syntax)
wildcardquery(field_expression, query_expression[, boost=<value>])
wildcard_query(field_expression, query_expression[, boost=<value>])
예시 (Example)
다음 예시는 와일드카드 질의를 사용해요.
SELECT account_number, address
FROM accounts
WHERE wildcard_query(address, '*Holmes*');
결과에는 와일드카드 표현식과 일치하는 문서가 들어 있어요.
| account_number | address |
|---|---|
| 1 | 880 Holmes Lane |