엘라스틱서치 검색 쿼리 작성하는 방법입니다.
얼마 전에 추가한 지하철 인덱스를 예시로 하겠습니다.
위의 검색 쿼리 예제를 설명하면
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 |