Match phrase 쿼리
Match phrase 쿼리
match_phrase 쿼리를 사용해 지정된 순서로 정확한 구문을 포함한 문서를 매칭할 수 있어요. slop 파라미터를 제공해 구문 매칭에 유연성을 더할 수 있습니다.
출처: 문서
본문
match_phrase 쿼리를 사용해 지정된 순서로 정확한 구문을 포함한 문서를 매칭하세요. slop 파라미터를 제공해 구문 매칭에 유연성을 더할 수 있어요.
match_phrase 쿼리는 용어 시퀀스를 매칭하는 구문 쿼리를 만들어요.
다음 예시는 기본 match_phrase 쿼리를 보여줘요.
GET _search
{
"query": {
"match_phrase": {
"title": "the wind"
}
}
}
추가 파라미터를 전달하려면 확장 구문을 사용할 수 있어요.
GET _search
{
"query": {
"match_phrase": {
"title": {
"query": "the wind",
"analyzer": "stop"
}
}
}
}
예시 (Example)
예를 들어 다음 문서가 있는 인덱스를 생각해 볼게요.
PUT testindex/_doc/1
{
"title": "The wind rises"
}
PUT testindex/_doc/2
{
"title": "Gone with the wind"
}
다음 match_phrase 쿼리는 단어 wind 다음에 단어 rises가 오는 wind rises 구문을 검색해요.
GET testindex/_search
{
"query": {
"match_phrase": {
"title": "wind rises"
}
}
}
응답에는 일치하는 문서가 포함돼요.
응답
{
"took": 30,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.92980814,
"hits": [
{
"_index": "testindex",
"_id": "1",
"_score": 0.92980814,
"_source": {
"title": "The wind rises"
}
}
]
}
}
분석기 (Analyzer)
기본적으로 text 필드에서 쿼리를 실행하면 검색 텍스트가 필드와 연관된 인덱스 분석기를 사용해 분석돼요. analyzer 파라미터에서 다른 검색 분석기를 지정할 수 있어요. 예를 들어 다음 쿼리는 english 분석기를 사용해요.
GET testindex/_search
{
"query": {
"match_phrase": {
"title": {
"query": "the winds",
"analyzer": "english"
}
}
}
}
english 분석기는 불용어 the를 제거하고 형태소 분석(stemming)을 수행해 토큰 wind를 만들어요. 두 문서 모두 이 토큰과 일치하므로 결과에 반환돼요.
응답
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 2,
"relation": "eq"
},
"max_score": 0.19363807,
"hits": [
{
"_index": "testindex",
"_id": "1",
"_score": 0.19363807,
"_source": {
"title": "The wind rises"
}
},
{
"_index": "testindex",
"_id": "2",
"_score": 0.17225474,
"_source": {
"title": "Gone with the wind"
}
}
]
}
}
Slop
slop 파라미터를 제공하면 쿼리가 검색 용어의 재정렬을 허용해요. slop은 쿼리 구문의 단어 사이에 허용되는 다른 단어의 수를 지정해요. 예를 들어 다음 쿼리에서 검색 텍스트는 문서 텍스트와 비교해 재정렬되어 있어요.
GET _search
{
"query": {
"match_phrase": {
"title": {
"query": "wind rises the",
"slop": 3
}
}
}
}
이 쿼리는 여전히 일치하는 문서를 반환해요.
응답
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.44026947,
"hits": [
{
"_index": "testindex",
"_id": "1",
"_score": 0.44026947,
"_source": {
"title": "The wind rises"
}
}
]
}
}
빈 쿼리 (Empty query)
가능한 빈 쿼리에 대한 정보는 해당 match 쿼리 섹션을 참조하세요.
파라미터 (Parameters)
이 쿼리는 필드 이름(<field>)을 최상위 파라미터로 받아들여요.
GET _search
{
"query": {
"match_phrase": {
"": {
"query": "text to search for",
...
}
}
}
}
<field>는 다음 파라미터를 받아들여요. query를 제외한 모든 파라미터는 선택 사항이에요.
| 파라미터 | 데이터 타입 | 설명 |
|---|---|---|
query |
String | 검색에 사용할 쿼리 문자열. 필수. |
analyzer |
String | 쿼리 문자열 텍스트를 토큰화하는 데 사용되는 분석기. 기본값은 default_field에 대해 지정된 인덱스 시점 분석기. default_field에 분석기가 지정되지 않으면 분석기는 인덱스의 기본 분석기. index.query.default_field에 대한 자세한 내용은 Dynamic index-level index settings를 참조하세요. |
slop |
0(기본값) 또는 양의 정수 | 쿼리의 단어들이 순서가 뒤바뀌어도 여전히 일치로 간주될 수 있는 정도를 제어함. Lucene 문서에서: "쿼리 구문의 단어 사이에 허용되는 다른 단어의 수. 예를 들어 두 단어의 순서를 바꾸려면 두 번의 이동이 필요하므로(첫 번째 이동이 단어들을 서로 위에 놓음) 구문의 재정렬을 허용하려면 slop은 최소 2여야 함. 값 0은 정확히 일치를 요구함." |
zero_terms_query |
String | 어떤 경우에는 분석기가 쿼리 문자열에서 모든 용어를 제거함. 예를 들어 stop 분석기는 an but this 문자열에서 모든 용어를 제거함. 이런 경우 zero_terms_query는 문서를 하나도 매칭하지 않을지(none) 모든 문서를 매칭할지(all)를 지정함. 유효한 값은 none과 all. 기본값은 none. |