본문 바로가기

dev/ELK

Elastic Search 검색 쿼리

엘라스틱서치 검색 쿼리 작성하는 방법입니다.

 

얼마 전에 추가한 지하철 인덱스를 예시로 하겠습니다.

 

검색 쿼리 예제

 

위의 검색 쿼리 예제를 설명하면

 

1라인: GET 메소드를 통해 metro 인덱스 검색

3라인: metro 인덱스의 모든 필드 조회

4라인: 검색 결과 시작위치

5라인: 검색 결과 조회 개수

6~10라인: 검색 결과 조회 방법, rgst_date 필드를 내림차순 정렬

 

DB쿼리로 비유하면

 

select *

from metro

order by rgst_date desc

limit1

 

와 비슷하다고 할 수 있습니다.

 

검색 쿼리 예제

 

다음 검색 쿼리 예제는

 

15라인: metro 인덱스의 metro_name, metro_line, on_number, off_number, total_number 필드 조회

16~20라인: metro_name이 "서울역"인 도큐먼트 검색

"query": 검색 조건을 위한 매개변수

"match": 특정 필드와 일치를 확인하는 매개변수

 

DB쿼리로 비유하면

 

select metro_name, metro_line, on_number, off_number, total_number

from metro

where metro_name = '서울역'

 

와 비슷하다고 할 수 있습니다.

 

like 검색을 하려면 match 대신에 wildcard를 사용하면 됩니다.

 

"query":{
  "wildcard": {
    "metro_name": "서울역*"
  }
}

 

검색 쿼리 예제

 

마지막 검색 쿼리 예제는

 

25라인: metro 인덱스의 metro_name, metro_line, on_number, off_number, total_number 필드 조회

26~41라인: metro_name이 "서울역"인 도큐먼트와 metro_name이 "강남역"인 도큐먼트 검색

"query": 검색 조건을 위한 매개변수

"bool": 복수의 검색 조건을 지정하기 위한 매개변수

"should": 검색 조건 중 하나라도 만족하는 것을 검색 매개변수

"match": 특정 필드와 일치를 확인하는 매개변수

 

DB쿼리로 비유하면

 

select metro_name, metro_line, on_number, off_number, total_number

from metro

where metro_name = '서울역' or metro_name = '강남역'

 

와 비슷하다고 할 수 있습니다.

 

"should"는 DB 검색 쿼리의 OR 연산자와 비유할 수 있습니다.

 

반대로 AND 연산자로 비유할 수 있는 엘라스틱서치 검색 매개변수는 "must"입니다.

 

앞에서 작성한 검색 쿼리를 응용하면 복잡한 검색 쿼리를 작성할 수 있습니다.

'dev > ELK' 카테고리의 다른 글

Elastic Search bulk API  (0) 2023.06.12
Elastic Search 검색 결과 다운로드  (0) 2023.06.09
Kibana Vertical Chart  (0) 2023.06.07
Kibana Map  (0) 2023.06.07
Kibana Index Pattern  (0) 2023.05.26