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 조건)

  • operator: "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\"" } } }

🎯 추가 학습 추천

  1. bool 쿼리 (복합 조건 검색)
  2. term 쿼리 (정확한 단어 검색)
  3. wildcard & regex 검색
  4. fuzzy 검색 (오타 교정 검색)

 

+ Recent posts