ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Elasticsearch DSL 기본
    내가 공부하고 싶은 IT/지식정리 2023. 1. 1. 20:52

    DSL이란 Domain Specific Language 으로 JSON 에 기반한 질의 언어

    DB의 SQL 과 비슷한 언어로 사용자가 원하는 데이터를 추출하기 위한 질의 언어

     

    DSL 예시

    GET /조회할 인덱스명/_search
    {
      "query": {
        ...
      }
    }

    예) 실제 가장 기본적인 match 쿼리

    GET /cn-test-idx/_search
    {
      "query": {
        "match": {
          "kor_contents": "여러"
        }
      }
    }

     

    Query VS Filter

    DSL 설명에 앞서 query 와 filter 간의 차이점을 이해해야 함

    기본적으로 Elasticsearch 는 일치하는 검색 결과의 관련성을 점수 별로 정렬하여 각 문서와 쿼리와 얼마나 잘 일하는지 측정함

    관련성 점수는 소수점 숫장이며 검색 API의 _score 메터 필드에 반한됨
    _score 가 높을수록 문서의 관련성이 높다도 볼수 있음

    각 쿼리의 유형은 관 관련성 점수를 다르게 계산할 수 있지만 _score 계산은 query 나 filter 문에서 실행되는 것에 따라 달라짐

    • query
      query 문은 “이 문서가 이 쿼리 절과 얼마나 잘 일치합니까?” 라는 질문에 대답함. 문서가 일치하는지 여부를 결정하는 것 외에도 query 문은 _score 메타 필드에 관련성 점수를 계산함
      캐싱되지 않음
    • filter
      filter 문은 query 문과 같이 “이 문서가 이 쿼리 절과 얼마나 잘 일치합니까?” 라는 질문에 대답함. 차이점은 score를 계산하지 않고 간단하게 예 또는 아니오 로 계산함
      filter 문은 주로 구조화된 데이터를 필터링하는 데 사용됨. 예를 들어 “등록 시간이 2020년에서 2021년 사이의 데이터나 데이터의 상태 값이 삭제가 안 된 데이터” 와 같이 문서의 score 가 필요없는 데이터 형태를 필터링하는데 사용
      filter 문은 자동으로 캐싱하여 성능을 향상시킴

    query 와 filter 비교표

      Query Filter
    검색 결과 관련성 Yes or No
    검색 범위 전문 검색 주어진 질의에 해당하는 정확한 값
    캐시 여부 No Yes
    관련성 점수 계산 Yes No

    예)

    GET /cn-test-idx/_search
    {
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "kor_contents": "자비스"
              }
            },
            {
              "match": {
                "kor_contents": "엔진"
              }
            }
          ],
          "filter": [
            {
              "term": {
                "keyword_field": "2번"
              }
            },
            {
              "range": {
                "created_date": {
                  "gte": "2020-12-01 00:00:00"
                }
              }
            }
          ]
        }
      }
    }
    GET /cn-test-idx/_search
    {
      "query": {
        "bool": {
          "should": [
            {
              "match": {
                "kor_contents": "자비스"
              }
            },
            {
              "match": {
                "kor_contents": "여러"
              }
            }
          ],
          "minimum_should_match": 1, 
          "filter": [
            {
              "term": {
                "keyword_field": "1번"
              }
            },
            {
              "range": {
                "created_date": {
                  "gte": "2020-12-01 00:00:00"
                }
              }
            }
          ]
        }
      }
    }
    1. bool 하위 두 개의 match 절은 query 문을 사용하므로 각 문서가 얼마나 잘 알치하는 score 를 매기는 데 사용됨
    2. filter 하위의 term 과 range 절은 filter 문에서 사용되므로 위 조건에 일치하는 문서는 score 에 영향을 미치지 않고 결과를 반환함

    '내가 공부하고 싶은 IT > 지식정리' 카테고리의 다른 글

    Elasticsearch term & match  (0) 2023.01.01
    Elasticsearch bool 쿼리  (0) 2023.01.01
    Elasticsearch Inverted Index 의 이해  (0) 2022.12.25
    Elasticsearch 분석기 테스트  (0) 2022.12.25
    Elasticsearch 분석기  (0) 2022.12.25
Copyright @ 2016-2020 AmazonEberea