Full Text Query 개요
- Elasticsearch는 강력한 풀 텍스트 검색 기능을 제공하며, 다양한 쿼리 방식이 있습니다.
- 주요 쿼리 종류
- match_all: 전체 문서 검색
- match: 부분 일치 검색 (OR / AND 조건 가능)
- match_phrase: 순서 포함 정확한 구문 검색
- query_string: 복잡한 검색 연산자 지원
예제 데이터 입력
- my_index 인덱스에 _bulk API를 사용하여 데이터 입력
POST my_index/_bulk
{"index":{"_id":1}}
{"message":"The quick brown fox"}
{"index":{"_id":2}}
{"message":"The quick brown fox jumps over the lazy dog"}
{"index":{"_id":3}}
{"message":"The quick brown fox jumps over the quick dog"}
{"index":{"_id":4}}
{"message":"Brown fox brown dog"}
{"index":{"_id":5}}
{"message":"Lazy jumping dog"}
- message 필드에 다양한 단어가 포함된 문서 5개 입력됨
match_all 쿼리 (모든 문서 검색)
✅ 쿼리 없이 실행하면 match_all 적용
GET my_index/_search
✅ 명시적으로 match_all 사용
GET my_index/_search
{
"query": {
"match_all": {}
}
}
- 모든 문서를 검색
- hits.total.value에 검색된 문서 개수가 표시됨
match 쿼리 (부분 일치 검색)
✅ "dog" 포함 문서 검색
GET my_index/_search
{
"query": {
"match": {
"message": "dog"
}
}
}
- "dog" 단어가 포함된 모든 문서 검색
- 결과: 4개 문서 검색됨 (_id: 2, 3, 4, 5)
✅ 여러 개의 검색어 (OR 조건)
GET my_index/_search
{
"query": {
"match": {
"message": "quick dog"
}
}
}
- "quick" 또는 "dog" 중 하나라도 포함된 문서를 검색
- 결과: 5개 문서 검색됨 (_id: 1, 2, 3, 4, 5)
✅ 여러 개의 검색어 (AND 조건)
GET my_index/_search
{
"query": {
"match": {
"message": {
"query": "quick dog",
"operator": "and"
}
}
}
}
- "quick"과 "dog"을 모두 포함하는 문서만 검색
- 결과: 2개 문서 검색됨 (_id: 2, 3)
5. match_phrase 쿼리 (정확한 구문 검색)
✅ "lazy dog" 검색
GET my_index/_search
{
"query": {
"match_phrase": {
"message": "lazy dog"
}
}
}
- **"lazy dog"**이라는 정확한 문장이 포함된 문서 검색
- 결과: 1개 문서 검색됨 (_id: 2)
✅ match_phrase + slop 옵션 (단어 간격 허용)
GET my_index/_search
{
"query": {
"match_phrase": {
"message": {
"query": "lazy dog",
"slop": 1
}
}
}
}
- 설명
- "lazy dog" 사이에 다른 단어가 1개까지 허용
- "lazy jumping dog" 문장도 검색됨
- 결과: 2개 문서 검색됨 (_id: 2, 5)
- 추가 설정 가능
- slop: 2 → "lazy jumping brown dog" 같은 문장도 검색 가능
query_string 쿼리 (복잡한 검색)
- 루씬(Lucene) 문법을 활용한 고급 검색
- 연산자 사용 가능 (AND, OR, NOT)
- 필드 지정 가능 (default_field)
✅ "lazy" AND "jumping" OR "quick dog" 검색
GET my_index/_search
{
"query": {
"query_string": {
"default_field": "message",
"query": "(jumping AND lazy) OR \"quick dog\""
}
}
}
- "lazy"와 "jumping"을 모두 포함하거나 "quick dog" 문장을 포함하는 문서 검색
- 결과: 2개 문서 검색됨 (_id: 3, 5)
Full Text Query 정리
쿼리 유형 |
설명 |
예제 |
match_all |
모든 문서 검색 |
{ "query": { "match_all": {} } } |
match |
부분 일치 검색 (OR) |
{ "query": { "match": { "message": "dog" } } } |
match (AND 조건) |
"quick"과 "dog"을 모두 포함 |
{ "query": { "match": { "message": { "query": "quick dog", "operator": "and" } } } } |
match_phrase |
"lazy dog" 문장 검색 |
{ "query": { "match_phrase": { "message": "lazy dog" } } } |
match_phrase + slop |
"lazy dog" 사이에 1개 단어 허용 |
{ "query": { "match_phrase": { "message": { "query": "lazy dog", "slop": 1 } } } } |
query_string |
복잡한 검색 연산자 지원 |
{ "query": { "query_string": { "default_field": "message", "query": "(jumping AND lazy) OR \"quick dog\"" } } } |
🎯 추가 학습 추천
- bool 쿼리 (복합 조건 검색)
- term 쿼리 (정확한 단어 검색)
- wildcard & regex 검색
- fuzzy 검색 (오타 교정 검색)