Elastic Search Query

Multi match

여러 개의 field를 대상으로 검색

Term

텍스트 형태의 값 검색 유형 중 하나

match: 텍스트, 숫자, 날짜등이 포함된 문장의 형태소 분석을 통해 term으로 분리한 후 검색

match vs term : match -> 토크나이징 함, term -> 토크나이징 안함

GET movie_search/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "repGenreNm": {
              "value": "코미디"
            }
          }
        },
        {
          "match": {
            "repNationNm": "한국"
          }
        }
      ],
      "must_not": [
        {"match": {
          "typeNm": "단편"
        }}
      ]
    }
  }
}

Prefix

value 로 시작하는 document 검색

GET movie_search/_search
{
  "query": {
    "prefix": {
      "movieNm": {
        "value": "살아남은"
      }
    }
  }
}

Wildcard

*를 활용한 표현 가능

GET movie_search/_search
{
  "query": {
    "wildcard": {
      "movieNm": {
        "value": "*밀*"
      }
    }
  }
}

Bool

Bool 복합 쿼리

여러 조건을 조합하기에 용이

must : 검색 결과가 참인 검색

must_not : 검색 결과가 거짓인 검색

GET my_index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "message": "pink"
          }
        }
      ],
			"must_not": [
        {
          "match": {
            "message": "red"
          }
        }
      ]
    }
  }
}

Should

검색 우선순위 조절하는 하는 방법

# "pink blue" 이 형식의 구문이 포함된 doc에게 더 높은 점수 배정하기
GET my_index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "message": "pink blue"
          }
        }
      ],
      "should": [
        {
          "match_phrase": {
            "message": "pink blue"
          }
        }
      ]
    }
  }
}

Range

gte[greater than or equal : 이상]

gt[greater than] - 초과

lte[Less than or equal] - 이하

lt[less than] - 미만

# age 20 이상 30 이하
GET account/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 20,
        "lte": 30
      }
    }
  }
}

# balance가 40000이상
GET account/_search
{
  "query": {
    "range": {
      "balance": {
        "gte": 40000
      }
    }
  }
}

Filter

filter

filter에 해당하는 document들만 가져와서 조건에 맞게 실행

장점 : 일괄 관리, score에는 영향을 주지 않음

GET my_index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "message": "Chrome"
          }
        }
      ],
      "filter": [
        {
          "bool": {
            "must_not":[
              {
                "match" : {
                  "message": "하늘사"
                }
              **}
            ]
          }
        }
      ]
    }
  }
}
GET movie_search/_search
{
  "query": {
    "multi_match": {
      "query": "가족",
      "fields": ["movieNm", "movieNmEn"]
    }
  }
}

Discussion and feedback