Query string 쿼리
Query string 쿼리
query_string 쿼리는 쿼리 문자열 구문(query string syntax)을 기반으로 쿼리 문자열을 파싱해요. 와일드카드를 포함하고 여러 필드를 검색할 수 있는 강력하면서도 간결한 쿼리를 만들 수 있습니다.
출처: 문서
본문
query_string 쿼리는 쿼리 문자열 구문을 기반으로 쿼리 문자열을 파싱해요. 와일드카드를 포함하고 여러 필드를 검색할 수 있는 강력하면서도 간결한 쿼리를 만들 수 있어요.
query_string 쿼리를 사용한 검색은 중첩 문서를 반환하지 않아요. 중첩 필드를 검색하려면 nested 쿼리를 사용하세요.
Query string 쿼리는 엄격한 구문을 가지며 구문이 유효하지 않으면 오류를 반환해요. 따라서 검색 상자 애플리케이션에는 잘 맞지 않아요. 덜 엄격한 대안으로는 simple_query_string 쿼리를 고려해 보세요. 쿼리 구문 지원이 필요 없다면 match 쿼리를 사용하세요.
쿼리 문자열 구문 (Query string syntax)
쿼리 문자열 구문은 Apache Lucene 쿼리 구문을 기반으로 해요.
다음 경우에 쿼리 문자열 구문을 사용할 수 있어요.
query_string쿼리에서. 예를 들면:
GET _search
{
"query": {
"query_string": {
"query": "the wind AND (rises OR rising)"
}
}
}
- OpenSearch Dashboards의 Discover나 Dashboard 애플리케이션에서 DQL을 끈 경우(아래 이미지 참조). DQL과 Query string 쿼리(Lucene) 언어는 Discover와 Dashboards의 두 가지 검색 창 언어 옵션이에요. 이 언어 옵션들을 비교하려면 DQL and query string query quick reference를 참조하세요.
- HTTP 요청 쿼리 파라미터로 검색하는 경우. 예를 들면:
GET _search?q=wind
쿼리 문자열은 용어(term)와 연산자(operator)로 구성돼요. 용어는 단일 단어예요(예: 쿼리 wind rises에서 용어는 wind와 rises). 여러 용어가 따옴표로 둘러싸여 있으면 단어가 나타나는 순서대로 매칭되는 하나의 구문으로 취급돼요(예: "wind rises"). 연산자(OR, AND, NOT 등)는 쿼리 문자열의 텍스트를 해석하는 데 사용되는 Boolean 논리를 지정해요.
이 섹션의 예시들은 다음 매핑과 문서를 포함하는 인덱스를 사용해요.
PUT /testindex
{
"mappings": {
"properties": {
"title": {
"type": "text",
"fields": {
"english": {
"type": "text",
"analyzer": "english"
}
}
}
}
}
}
PUT /testindex/_doc/1
{
"title": "The wind rises"
}
PUT /testindex/_doc/2
{
"title": "Gone with the wind",
"description": "A 1939 American epic historical film"
}
PUT /testindex/_doc/3
{
"title": "Windy city"
}
PUT /testindex/_doc/4
{
"article title": "Wind turbines"
}
예약 문자 (Reserved characters)
다음은 query_string 쿼리의 예약 문자 목록이에요.
+, -, =, &&, ||, >, <, !, (, ),{, }, [, ], ^, ", ~, *, ?, :, \, /
예약 문자는 백슬래시(\)로 이스케이프하세요. JSON 요청을 보낼 때는 이중 백슬래시(\\)를 사용해 예약 문자를 이스케이프해야 해요(백슬래시 문자 자체가 예약되어 있으므로 백슬래시로 백슬래시를 또 이스케이프해야 함).
예를 들어 2*3이라는 표현식을 검색하려면 쿼리 문자열 2\\*3을 지정하세요.
GET /testindex/_search
{
"query": {
"query_string": {
"query": "title: 2\\*3"
}
}
}
>와 < 기호는 이스케이프할 수 없어요. 이들은 range 쿼리로 해석돼요.
공백 문자와 빈 쿼리 (White space characters and empty queries)
공백 문자는 연산자로 간주되지 않아요. 쿼리 문자열이 비어 있거나 공백 문자만 포함하면 쿼리는 결과를 반환하지 않아요.
필드 이름 (Field names)
콜론 앞에 필드 이름을 지정하세요. 다음 표는 필드 이름이 포함된 예시 쿼리를 담고 있어요.
| query_string 쿼리에서의 쿼리 | Discover에서의 쿼리 | 문서가 일치하기 위한 기준 | testindex 인덱스에서 일치하는 문서 |
|---|---|---|---|
title: wind |
title: wind |
title 필드가 단어 wind를 포함함 |
1, 2 |
title: (wind OR windy) |
title: (wind OR windy) |
title 필드가 단어 wind 또는 windy를 포함함 |
1, 2, 3 |
title: \"wind rises\" |
title: "wind rises" |
title 필드가 구문 wind rises를 포함함. 따옴표를 백슬래시로 이스케이프함 |
1 |
article\\ title: wind |
article\ title: wind |
article title 필드가 단어 wind를 포함함. 공백 문자를 백슬래시로 이스케이프함 |
4 |
title.\\*: rise |
title.\*: rise |
title.로 시작하는 모든 필드(이 예시에서는 title.english)가 단어 rise를 포함함. 와일드카드 문자를 백슬래시로 이스케이프함 |
1 |
_exists_: description |
_exists_: description |
description 필드가 존재함 |
2 |
와일드카드 표현식 (Wildcard expressions)
특수 문자로 와일드카드 표현식을 지정할 수 있어요. ?는 단일 문자를 대체하고, *는 0개 이상의 문자를 대체해요.
예시
다음 쿼리는 단어 gone을 포함한 title과 hist로 시작하는 단어를 포함한 description을 검색해요.
GET /testindex/_search
{
"query": {
"query_string": {
"query": "title: gone AND description: hist*"
}
}
}
와일드카드 쿼리는 상당한 양의 메모리를 사용할 수 있어 성능이 저하될 수 있어요. 단어 시작 부분의 와일드카드(예: *cal)는 그러한 와일드카드에서 문서를 매칭하려면 인덱스의 모든 용어를 조사해야 하므로 가장 비용이 많이 들어요. 선행 와일드카드를 비활성화하려면 allow_leading_wildcard를 false로 설정하세요.
효율성을 위해 * 같은 순수 와일드카드는 exists 쿼리로 재작성돼요. 따라서 description: * 와일드카드는 description 필드에 빈 값을 포함한 문서와 일치하지만 description 필드가 누락되었거나 null 값을 가진 문서와는 일치하지 않아요.
analyze_wildcard를 true로 설정하면 OpenSearch는 *로 끝나는 쿼리(예: hist*)를 분석해요. 결과적으로 OpenSearch는 첫 번째 n-1개 토큰에 대해 정확히 일치하고 마지막 토큰에 대해 접두사 일치를 취해 생성된 토큰들로 구성된 Boolean 쿼리를 만들어요.
정규 표현식 (Regular expressions)
쿼리 문자열에 정규 표현식 패턴을 지정하려면 슬래시(/)로 감싸세요. 예: title: /w[a-z]nd/.
allow_leading_wildcard 파라미터는 정규 표현식에는 적용되지 않아요. 예를 들어 /.*d/ 같은 쿼리 문자열은 인덱스의 모든 용어를 조사해요.
퍼지 매칭 (Fuzziness)
~ 연산자로 퍼지 쿼리를 실행할 수 있어요. 예: title: rise~.
이 쿼리는 최대 허용 편집 거리 안에서 검색 용어와 유사한 용어를 포함한 문서를 검색해요. 편집 거리는 한 용어를 다른 용어로 바꾸는 데 필요한 한 문자 변경(삽입, 삭제, 대체, 전치)의 수를 측정하는 Damerau-Levenshtein 거리로 정의돼요.
기본 편집 거리 2는 오타의 80%를 잡아야 해요. 기본 편집 거리를 바꾸려면 ~ 연산자 뒤에 새 편집 거리를 지정하세요. 예를 들어 편집 거리를 1로 설정하려면 쿼리 title: rise~1을 사용하세요.
퍼지와 와일드카드 연산자를 섞지 마세요. 퍼지와 와일드카드 연산자를 모두 지정하면 둘 중 하나의 연산자는 적용되지 않아요. 예를 들어 wnid*~1을 검색하면 와일드카드 연산자 *는 적용되지만 퍼지 연산자 ~1은 적용되지 않아요.
근접 쿼리 (Proximity queries)
근접 쿼리는 검색 구문이 지정된 순서일 것을 요구하지 않아요. 구문의 단어들이 다른 순서이거나 다른 단어로 분리되는 것을 허용해요. 근접 쿼리는 구문에서 단어의 최대 편집 거리를 지정해요. 예를 들어 다음 쿼리는 지정된 구문의 단어들을 매칭할 때 편집 거리 4를 허용해요.
GET /testindex/_search
{
"query": {
"query_string": {
"query": "title: \"wind gone\"~4"
}
}
}
OpenSearch가 문서를 매칭할 때, 문서의 단어가 쿼리에 지정된 단어 순서에 가까울수록(편집 거리가 작을수록) 문서의 관련성 점수가 높아져요.
범위 (Ranges)
숫자, 문자열 또는 날짜 필드의 범위를 지정하려면 포괄 범위에는 대괄호([min TO max])를, 배타 범위에는 중괄호({min TO max})를 사용하세요. 대괄호와 중괄호를 혼합해 하한과 상한을 포함하거나 제외할 수도 있어요(예: {min TO max]).
날짜 범위의 날짜는 날짜가 포함된 필드를 매핑할 때 사용한 형식으로 제공해야 해요. 지원되는 날짜 형식에 대한 자세한 내용은 Formats를 참조하세요.
다음 표는 범위 구문 예시를 제공해요.
| 데이터 타입 | 쿼리 | 쿼리 문자열 |
|---|---|---|
| 숫자 | 계좌 번호가 1부터 15까지(포함)인 문서 | account_number: [1 TO 15] 또는 account_number: (>=1 AND <=15) 또는 account_number: (+>=1 +<=15) |
| 계좌 번호가 15 이상인 문서 | account_number: [15 TO *] 또는 account_number: >=15(>= 기호 뒤에 공백 없음) |
|
| 문자열 | 성이 Bates(포함)부터 Duke(제외)까지인 문서 | lastname: [Bates TO Duke} 또는 lastname: (>=Bates AND <Duke) |
| 성이 알파벳순으로 Bates 앞에 오는 문서 | lastname: {* TO Bates} 또는 lastname: <Bates(< 기호 뒤에 공백 없음) |
|
| 날짜 | 출시 날짜가 03/21/2023과 09/25/2023 사이(포함)인 문서 | release_date: [03/21/2023 TO 09/25/2023] |
쿼리 문자열에서 범위를 지정하는 대안으로 더 안정적인 구문을 제공하는 range 쿼리를 사용할 수 있어요.
부스트 (Boosting)
캐럿(^) 부스트 연산자를 사용해 배수로 문서의 관련성 점수를 부스트하세요. [0, 1) 범위의 값은 관련성을 낮추고, 1보다 큰 값은 관련성을 높여요. 기본값은 1.
다음 표는 부스트 예시를 제공해요.
| 타입 | 설명 | 쿼리 문자열 |
|---|---|---|
| 단어 부스트 | 단어 street를 포함한 모든 주소를 찾고 Madison을 포함한 주소를 부스트 |
address: Madison^2 street |
| 구문 부스트 | 구문 wind rises를 포함한 title이 있는 문서를 찾아 2만큼 부스트 |
title: \"wind rises\"^2 |
단어 wind rises를 포함한 title이 있는 문서를 찾고, 구문 wind rises를 포함한 문서를 2만큼 부스트 |
title: (wind rises)^2 |
Boolean 연산자 (Boolean operators)
쿼리에 검색 용어를 제공하면 기본적으로 쿼리는 제공된 용어 중 적어도 하나를 포함한 문서를 반환해요. default_operator 파라미터를 사용해 모든 용어에 대한 연산자를 지정할 수 있어요. 따라서 default_operator를 AND로 설정하면 모든 용어가 필수가 되고, OR로 설정하면 모든 용어가 선택 사항이 돼요.
+ 및 - 연산자
필수 및 선택 용어를 더 세밀하게 제어하려면 +와 - 연산자를 사용할 수 있어요. + 연산자는 그 뒤의 용어를 필수로 만들고, - 연산자는 그 뒤의 용어를 제외해요.
예를 들어 쿼리 문자열 title: (gone +wind -turbines)는 용어 gone이 선택 사항이고, 용어 wind는 반드시 있어야 하며, 용어 turbines는 일치 문서의 title에 없어야 함을 지정해요.
GET /testindex/_search
{
"query": {
"query_string": {
"query": "title: (gone +wind -turbines)"
}
}
}
이 쿼리는 두 개의 일치 문서를 반환해요.
{
"_index": "testindex",
"_id": "2",
"_score": 1.3159468,
"_source": {
"title": "Gone with the wind",
"description": "A 1939 American epic historical film"
}
},
{
"_index": "testindex",
"_id": "1",
"_score": 0.3438858,
"_source": {
"title": "The wind rises"
}
}
앞의 쿼리는 다음 Boolean 쿼리와 동일해요.
GET testindex/_search
{
"query": {
"bool": {
"must": {
"match": {
"title": "wind"
}
},
"should": {
"match": {
"title": "gone"
}
},
"must_not": {
"match": {
"title": "turbines"
}
}
}
}
}
일반 Boolean 연산자
또는 다음 Boolean 연산자를 사용할 수 있어요: AND, &&, OR, ||, NOT, !. 하지만 이 연산자들은 우선순위 규칙을 따르지 않으므로, 여러 Boolean 연산자를 사용할 때는 괄호로 우선순위를 지정해야 해요. 예를 들어 쿼리 문자열 title: (gone +wind -turbines)는 Boolean 연산자를 사용해 다음과 같이 다시 쓸 수 있어요:
title: ((gone AND wind) OR wind) AND NOT turbines
재작성된 쿼리 문자열을 포함한 다음 쿼리를 실행하세요.
GET testindex/_search
{
"query": {
"query_string": {
"query": "title: ((gone AND wind) OR wind) AND NOT turbines"
}
}
}
이 쿼리는 +와 - 연산자를 사용한 쿼리와 같은 결과를 반환해요. 다만 일치 문서의 관련성 점수는 이전 결과와 같지 않다는 점에 유의하세요.
{
"_index": "testindex",
"_id": "2",
"_score": 1.6166971,
"_source": {
"title": "Gone with the wind",
"description": "A 1939 American epic historical film"
}
},
{
"_index": "testindex",
"_id": "1",
"_score": 0.3438858,
"_source": {
"title": "The wind rises"
}
}
그룹화 (Grouping)
괄호를 사용해 여러 절이나 용어를 하위 쿼리로 그룹화하세요. 예를 들어 다음 쿼리는 단어 gone 또는 rises를 포함하고 title에 단어 wind를 반드시 포함해야 하는 문서를 검색해요.
GET testindex/_search
{
"query": {
"query_string": {
"query": "title: (gone OR rises) AND wind"
}
}
}
결과에는 두 개의 일치 문서가 포함돼요.
{
"_index": "testindex",
"_id": "1",
"_score": 1.5046883,
"_source": {
"title": "The wind rises"
}
},
{
"_index": "testindex",
"_id": "2",
"_score": 1.3159468,
"_source": {
"title": "Gone with the wind",
"description": "A 1939 American epic historical film"
}
}
그룹화를 사용해 하위 쿼리 결과를 부스트하거나 지정된 필드를 대상으로 할 수도 있어요. 예: title:(gone AND wind) description:(historical film)^2.
여러 필드 검색하기 (Searching multiple fields)
여러 필드를 검색하려면 fields 파라미터를 사용하세요. fields 파라미터를 제공하면 쿼리는 field_1: query OR field_2: query ...로 재작성돼요.
예를 들어 다음 쿼리는 title과 description 필드에서 용어 wind 또는 film을 검색해요.
GET testindex/_search
{
"query": {
"query_string": {
"fields": [ "title", "description" ],
"query": "wind AND film"
}
}
}
앞의 쿼리는 fields 파라미터를 제공하지 않는 다음 쿼리와 동일해요.
GET testindex/_search
{
"query": {
"query_string": {
"query": "(title:wind OR description:wind) AND (title:film OR description:film)"
}
}
}
필드의 여러 하위 필드 검색하기 (Searching multiple subfields of a field)
필드의 모든 내부 필드를 검색하려면 와일드카드를 사용할 수 있어요. 예를 들어 address 필드 안의 모든 하위 필드를 검색하려면 다음 쿼리를 사용하세요.
GET /testindex/_search
{
"query": {
"query_string" : {
"fields" : ["address.*"],
"query" : "New AND (York OR Jersey)"
}
}
}
앞의 쿼리는 fields 파라미터를 제공하지 않는 다음 쿼리와 동일해요(*가 \로 이스케이프된다는 점에 유의).
GET /testindex/_search
{
"query": {
"query_string" : {
"query" : "address.\\*: New AND (York OR Jersey)"
}
}
}
부스트 (Boosting)
각 검색 용어에서 생성된 하위 쿼리는 tie_breaker가 있는 dis_max 쿼리를 사용해 결합돼요. 개별 필드를 부스트하려면 ^ 연산자를 사용하세요. 예를 들어 다음 쿼리는 title 필드를 2배로 부스트해요.
GET testindex/_search
{
"query": {
"query_string": {
"fields": [ "title^2", "description" ],
"query": "wind AND film"
}
}
}
필드의 모든 하위 필드를 부스트하려면 와일드카드 뒤에 부스트 연산자를 지정하세요.
GET /testindex/_search
{
"query": {
"query_string" : {
"fields" : ["work_address", "address.*^2"],
"query" : "New AND (York OR Jersey)"
}
}
}
여러 필드 검색 파라미터 (Parameters for multiple field searches)
여러 필드를 검색할 때 query_string 쿼리에 추가 선택 파라미터 type을 전달할 수 있어요.
| 파라미터 | 데이터 타입 | 설명 |
|---|---|---|
type |
String | OpenSearch가 쿼리를 실행하고 결과에 점수를 매기는 방식을 결정함. 유효한 값은 best_fields, bool_prefix, most_fields, cross_fields, phrase, phrase_prefix. 기본값은 best_fields. 유효한 값에 대한 설명은 Multi-match query types를 참조하세요. |
query_string 쿼리의 동의어 (Synonyms in the query_string query)
query_string 쿼리는 synonym_graph 토큰 필터로 다중 용어 동의어 확장을 지원해요. synonym_graph 토큰 필터를 사용하면 OpenSearch는 각 동의어에 대해 match phrase 쿼리를 만들어요.
auto_generate_synonyms_phrase_query 파라미터는 다중 용어 동의어에 대해 match phrase 쿼리를 자동으로 생성할지 여부를 지정해요. 기본적으로 auto_generate_synonyms_phrase_query는 true이므로 ml, machine learning을 동의어로 지정하고 ml을 검색하면 OpenSearch는 ml OR "machine learning"을 검색해요.
또는 결합(conjunction)을 사용해 다중 용어 동의어를 매칭할 수 있어요. auto_generate_synonyms_phrase_query를 false로 설정하면 OpenSearch는 ml OR (machine AND learning)을 검색해요.
예를 들어 다음 쿼리는 텍스트 ml models를 검색하고 각 동의어에 대해 match phrase 쿼리를 자동 생성하지 않도록 지정해요.
GET /testindex/_search
{
"query": {
"query_string": {
"default_field": "title",
"query": "ml models",
"auto_generate_synonyms_phrase_query": false
}
}
}
이 쿼리에 대해 OpenSearch는 다음 Boolean 쿼리를 만들어요: (ml OR (machine AND learning)) models.
Minimum should match
query_string 쿼리는 각 연산자를 중심으로 쿼리를 분할하고 입력 전체에 대한 Boolean 쿼리를 만들어요. minimum_should_match 파라미터는 문서가 검색 결과에 반환되기 위해 일치해야 하는 최소 용어 수를 지정해요. 예를 들어 다음 쿼리는 각 검색 결과에 대해 description 필드가 최소 두 개의 용어와 일치해야 한다고 지정해요.
GET /testindex/_search
{
"query": {
"query_string": {
"fields": [
"description"
],
"query": "historical epic film",
"minimum_should_match": 2
}
}
}
이 쿼리에 대해 OpenSearch는 다음 Boolean 쿼리를 만들어요: (description:historical description:epic description:film)~2.
여러 필드에서의 Minimum should match
query_string 쿼리에 여러 필드를 지정하면 OpenSearch는 지정된 필드에 대한 dis_max 쿼리를 만들어요. 쿼리 용어에 대해 연산자를 명시적으로 지정하지 않으면 전체 쿼리 텍스트가 하나의 절로 취급돼요. OpenSearch는 이 단일 절을 사용해 각 필드에 대한 쿼리를 만들어요. 최종 Boolean 쿼리는 모든 필드에 대한 dis_max 쿼리에 해당하는 단일 절을 포함하므로 minimum_should_match 파라미터는 적용되지 않아요.
예를 들어 다음 쿼리에서 historical epic heroic은 단일 절로 취급돼요.
GET /testindex/_search
{
"query": {
"query_string": {
"fields": [
"title",
"description"
],
"query": "historical epic heroic",
"minimum_should_match": 2
}
}
}
이 쿼리에 대해 OpenSearch는 다음 Boolean 쿼리를 만들어요: ((title:historical title:epic title:heroic) | (description:historical description:epic description:heroic)).
쿼리 용어에 명시적 연산자(AND 또는 OR)를 추가하면 각 용어는 minimum_should_match 파라미터를 적용할 수 있는 별도의 절로 간주돼요. 예를 들어 다음 쿼리에서 historical, epic, heroic은 별도의 절로 간주돼요.
GET /testindex/_search
{
"query": {
"query_string": {
"fields": [
"title",
"description"
],
"query": "historical OR epic OR heroic",
"minimum_should_match": 2
}
}
}
이 쿼리에 대해 OpenSearch는 다음 Boolean 쿼리를 만들어요: ((title:historical | description:historical) (description:epic | title:epic) (description:heroic | title:heroic))~2. 이 쿼리는 세 절 중 적어도 두 개와 일치해요. 각 절은 각 용어에 대해 title과 description 필드 양쪽에 대한 dis_max 쿼리를 나타내요.
또는 minimum_should_match가 적용되도록 보장하려면 type 파라미터를 cross_fields로 설정할 수 있어요. 이는 입력 텍스트가 분석될 때 같은 분석기를 가진 필드들이 함께 그룹화되어야 함을 나타내요.
GET /testindex/_search
{
"query": {
"query_string": {
"fields": [
"title",
"description"
],
"query": "historical epic heroic",
"type": "cross_fields",
"minimum_should_match": 2
}
}
}
이 쿼리에 대해 OpenSearch는 다음 Boolean 쿼리를 만들어요: ((title:historical | description:historical) (description:epic | title:epic) (description:heroic | title:heroic))~2.
하지만 서로 다른 분석기를 사용하면 각 용어에 minimum_should_match 파라미터가 적용되도록 쿼리에서 명시적 연산자를 사용해야 해요.
파라미터 (Parameters)
다음 표는 query_string 쿼리가 지원하는 파라미터를 나열해요. query를 제외한 모든 파라미터는 선택 사항이에요.
| 파라미터 | 데이터 타입 | 설명 |
|---|---|---|
query |
String | 검색에 사용할 쿼리 문자열 구문의 표현식을 포함할 수 있는 텍스트. 필수. |
allow_leading_wildcard |
Boolean | *와 ?가 검색 용어의 첫 문자로 허용되는지 여부를 지정함. 기본값은 true. |
analyze_wildcard |
Boolean | OpenSearch가 와일드카드 용어를 분석하려 시도해야 하는지 여부를 지정함. 기본값은 false. |
analyzer |
String | 쿼리 문자열 텍스트를 토큰화하는 데 사용되는 분석기. 기본값은 default_field에 대해 지정된 인덱스 시점 분석기. default_field에 분석기가 지정되지 않으면 분석기는 인덱스의 기본 분석기. index.query.default_field에 대한 자세한 내용은 Dynamic index-level index settings를 참조하세요. |
auto_generate_synonyms_phrase_query |
Boolean | 다중 용어 동의어에 대해 match phrase 쿼리를 자동으로 생성할지 여부를 지정함. 예를 들어 ba, batting average를 동의어로 지정하고 ba를 검색하면 OpenSearch는 (이 옵션이 true이면) ba OR "batting average"를 검색하거나 (이 옵션이 false이면) ba OR (batting AND average)를 검색함. 기본값은 true. |
boost |
Floating-point | 주어진 배수로 절을 부스트함. 복합 쿼리에서 절에 가중치를 두는 데 유용함. [0, 1) 범위의 값은 관련성을 낮추고 1보다 큰 값은 관련성을 높임. 기본값은 1. |
default_field |
String | 쿼리 문자열에서 필드가 지정되지 않으면 검색할 필드. 와일드카드를 지원함. 기본값은 index.query.default_field 인덱스 설정에 지정된 값. 기본적으로 index.query.default_field는 *이며, 이는 term 쿼리 대상이 되는 모든 필드를 추출하고 메타데이터 필드를 필터링함을 의미함. 접두사가 지정되지 않으면 추출된 필드들이 쿼리로 결합됨. 대상 필드에는 중첩 문서가 포함되지 않음. 모든 대상 필드를 검색하는 것은 리소스를 많이 소모하는 연산일 수 있음. indices.query.bool.max_clause_count 검색 설정은 한 번에 쿼리할 수 있는 필드 수와 용어 수의 곱의 최대값을 정의함. indices.query.bool.max_clause_count의 기본값은 1,024. |
default_operator |
String | 쿼리 문자열에 여러 검색 용어가 있을 때 문서가 일치로 간주되기 위해 모든 용어가 일치해야 하는지(AND) 아니면 하나의 용어만 일치해도 되는지(OR). 유효한 값은 다음과 같음. - OR: 문자열 to be는 to OR be로 해석됨. - AND: 문자열 to be는 to AND be로 해석됨. 기본값은 OR. |
enable_position_increments |
Boolean | true이면 결과 쿼리가 위치 증가를 인식함. 이 설정은 불용어 제거가 용어 사이에 원치 않는 "간격"을 남길 때 유용함. 기본값은 true. |
fields |
문자열 배열 | 검색할 필드 목록(예: "fields": ["title^4", "description"]). 와일드카드를 지원함. 지정하지 않으면 기본값은 ["*"]인 index.query.default_field 설정. |
fuzziness |
String | 용어가 값과 일치하는지 결정할 때 한 단어를 다른 단어로 바꾸는 데 필요한 문자 편집 수(삽입, 삭제, 대체). 예를 들어 wined와 wind 사이의 거리는 1. 유효한 값은 음이 아닌 정수 또는 AUTO. 기본값 AUTO는 검색 용어의 길이에 따라 편집 거리를 동적으로 선택함. AUTO:[low],[high] 구문을 사용해 임계값을 사용자 지정할 수 있는데, 여기서 low와 high는 문자 길이 경계를 정의함. 생략하면 OpenSearch는 기본값으로 AUTO:3,6을 사용하며, 이는 다음 규칙을 적용함. - 0–2자의 용어: 정확히 일치 필요(편집 0). - 3–5자의 용어: 최대 1개 편집 허용. - 6자 이상의 용어: 최대 2개 편집 허용. 예를 들어 AUTO:4,7은 0–3자의 용어에서 정확히 일치를 요구하고, 4–6자의 용어에서 최대 1개 편집을 허용하며, 7자 이상의 용어에서 최대 2개 편집을 허용함. 대부분의 시나리오에서는 AUTO 사용을 권장함. |
fuzzy_max_expansions |
양의 정수 | 쿼리가 확장할 수 있는 최대 용어 수. 퍼지 쿼리는 fuzziness에 지정된 거리 안에 있는 일치 용어 수로 "확장"됨. 그런 다음 OpenSearch는 그 용어들을 매칭하려 함. 기본값은 50. |
fuzzy_transpositions |
Boolean | fuzzy_transpositions를 true(기본값)로 설정하면 fuzziness 옵션의 삽입, 삭제, 대체 연산에 인접 문자 교체가 추가됨. 예를 들어 fuzzy_transpositions가 true이면 wind와 wnid 사이의 거리는 1("n"과 "i"를 교체)이고, false이면 2("n"을 삭제, "n"을 삽입). fuzzy_transpositions가 false이면 rewind와 wnid는 wind로부터 같은 거리(2)를 가지며, 더 인간 중심적인 의견상 wnid가 명백한 오타임에도 그렇음. 대부분의 사용 사례에서 기본값이 좋은 선택임. |
lenient |
Boolean | lenient를 true로 설정하면 쿼리와 문서 필드 사이의 데이터 타입 불일치를 무시함. 예를 들어 "8.2" 쿼리 문자열은 float 타입 필드와 일치할 수 있음. 기본값은 false. |
max_determinized_states |
양의 정수 | 정규 표현식을 포함한 쿼리 문자열(예: "query": "/wind.+?/")에 대해 Lucene이 만들 수 있는 최대 "상태"(복잡성 측정) 수. 더 큰 숫자는 더 많은 메모리를 사용하는 쿼리를 허용함. 기본값은 10,000. |
minimum_should_match |
양 또는 음의 정수, 양 또는 음의 백분율, 조합 | 쿼리 문자열에 여러 검색 용어가 있고 or 연산자를 사용하는 경우, 문서가 일치로 간주되기 위해 일치해야 하는 용어 수. 예를 들어 minimum_should_match가 2이면 wind often rising은 The Wind Rises와 일치하지 않음. minimum_should_match가 1이면 일치함. 자세한 내용은 Minimum should match를 참조하세요. |
phrase_slop |
Integer | 일치된 단어 사이에 허용되는 최대 단어 수. phrase_slop이 2이면 구문에서 일치된 단어 사이에 최대 두 개의 단어가 허용됨. 전치된 단어는 slop 2를 가짐. 기본값은 0(일치된 단어가 서로 붙어 있어야 하는 정확한 구문 일치). |
quote_analyzer |
String | 쿼리 문자열에서 따옴표로 묶인 텍스트를 토큰화하는 데 사용되는 분석기. 따옴표로 묶인 텍스트에 대해 analyzer 파라미터를 무시함. 기본값은 default_field에 대해 지정된 search_quote_analyzer. |
quote_field_suffix |
String | 이 옵션은 비정확 일치가 사용하는 것과 다른 분석 방법을 사용해 정확한 일치(따옴표로 둘러싸인)를 검색하는 것을 지원함. 예를 들어 quote_field_suffix가 .exact이고 title 필드에서 \\\"lightly\\\"를 검색하면 OpenSearch는 title.exact 필드에서 단어 lightly를 검색함. 이 두 번째 필드는 다른 타입(예: text보다는 keyword)이나 다른 분석기를 사용할 수 있음. |
rewrite |
String | OpenSearch가 다중 용어 쿼리를 재작성하고 점수를 매기는 방식을 결정함. 유효한 값은 constant_score, scoring_boolean, constant_score_boolean, top_terms_N, top_terms_boost_N, top_terms_blended_freqs_N. 기본값은 constant_score. |
time_zone |
String | 원하는 시간대를 UTC에서 오프셋할 시간 수를 지정함. 쿼리 문자열에 날짜 범위가 포함되어 있으면 시간대 오프셋 수를 표시해야 함. 예를 들어 "query": "wind rises release_date[2012-01-01 TO 2014-01-01]")와 같은 날짜 범위가 있는 쿼리의 경우 time_zone": "-08:00"을 설정함. 오프셋 시간 수를 지정하는 데 사용되는 기본 시간대 형식은 UTC. |
Query string 쿼리는 내부적으로 prefix 쿼리로 변환될 수 있어요. search.allow_expensive_queries가 false로 설정되면 prefix 쿼리는 실행되지 않아요. index_prefixes가 활성화되면 search.allow_expensive_queries 설정은 무시되고 최적화된 쿼리가 만들어져 실행돼요.