범위 쿼리 range query
- 특정 날짜나 숫자의 범위를 지정해 범위 안에 포함된 데이터들을 검색할 때 사용된다.
- 날짜/숫자/IP 타입의 데이터는 범위 쿼리가 가능하지만, 문자형, 키워드 타입의 데이터에는 범위 쿼리를 사용할 수 없다.
GET kibana_sample_data_flights/_search
{
"query": {
"range": {
"timestamp": {
"gte": "2020/12/15",
"lte": "2020/12/16"
}
}
}
}
참고로, 날짜/시간 포맷이 맞아야 검색이 가능하므로, '2020-12-15', '2020-12-16'으로 검색 시 결과가 나오지 않는다.
<검색 범위 지정하는 파라미터>
gte | (gte: 10) 10과 같거나 10 보다 큰 값 |
(gte: 2021-01-21) 2021년 1월 21일이거나 그 이후의 날짜 | |
gt | (gt: 10) 10보다 큰 값 |
(gt: 2021-01-21) 2021년 1월 21일 이후의 날짜(2021년 1월 21은 포함되지 않음) | |
lte | (lte: 10) 10과 같거나 10 보다 작은 값 |
(lte: 2021-01-21) 2021년 1월 21일이거나 그 이전의 날짜 | |
lt | (lt: 10) 10보다 작은 값 |
(lt: 2021-01-21) 2021년 1월 21일 이전 날짜(2021년 1월 21은 포함되지 않음) |
GET kibana_sample_data_flights/_search
{
"query": {
"range": {
"timestamp": {
"gte": "now-1M"
}
}
}
}
<날짜/시간 관련 범위 표현식>
표현식 | 설명 |
now | 현재 시각 |
now + 1d | 현재 시각 + 1 |
now + 1h + 30m + 10s | 현재 시각 + 1시, 30분, 10초 |
2023-01-21 || + 1M | 2023-01-21 + 1달 |
<날짜/시간 단위 표기법>
시간 단위 | 의미 | 시간 단위 | 의미 | 시간 단위 | 의미 |
y(year) | 년 | M(month) | 월 | w(weeks) | 주 |
d(days) | 일 | H 또는 h(hours) | 시 | m(minutes) | 분 |
s(seconds) | 초 |
<범위 데이터 타입>
GET range_test_index/_search
{
"query": {
"range": {
"test_date": {
"gte": "2023-01-21",
"lte": "2023-01-28",
"relation": "within"
}
}
}
}
값 | 설명 |
intersects(기본값) | 쿼리 범위 값이 도큐먼트의 범위 데이터를 일부라도 포함하기만 하면 된다. |
contains | 도큐먼트의 범위 데이터가 쿼리 범위 값을 모두 포함해야 한다. |
within | 도큐먼트의 범위 데이터가 쿼리 범위 값 내에 전부 속해야 한다. |
ex,
Document1: 10 - 19
Document2 : 20 - 29
Document3 : 30 - 39
Document4 : 40 - 49
--- 결과
15 ~ 40 + intersects => Document1, Document2, Document3, Document4
15 - 45 + within => Document2, Document3
25 - 29 + contains => Document2
25 - 25 + contains => X
논리 쿼리 bool
- compound query 중의 하나이다.
GET <index>/_search
{
"query": {
"bool": {
"must": [
{ 쿼리문 }, ...
],
"must_not": [
{ 쿼리문 }, ...
],
"should": [
{ 쿼리문 }, ...
],
"filter": [
{ 쿼리문 }, ...
]
}
}
}
타입 | 설명 |
must | 쿼리를 실행하여 참인 도큐먼트를 찾는다. |
복수의 쿼리를 실행하면 AND 연산을 한다. | |
must_not | 쿼리를 실행하여 거짓인 도큐먼트를 찾는다. |
다른 타입과 같이 사용할 경우 도큐먼트에서 제외한다. | |
should | 단독으로 사용 시 쿼리를 실행하여 참인 도큐먼트를 찾는다. |
복수의 쿼리를 실행하면 OR 연산을 한다. | |
다른 타입과 같이 사용할 경우 스코어에만 활용된다. => 검색 순위 최적화 가능 | |
filter | 쿼리를 실행하여 '예/아니오' 형식의 필터 컨텍스트를 수행한다. => 불필요한 스코어 계산을 줄여 검색 성능을 높일 수 있다. |
아래 책 <엘라스틱 스택 개발부터 운영까지> 4.7, 4.8을 읽고 정리한 글입니다.
http://www.yes24.com/Product/Goods/103030516
반응형
'데이터베이스 > 엘라스틱서치' 카테고리의 다른 글
elasticsearch. 노리 분석기 [엘라스틱 스택 개발부터 운영까지] (1) | 2023.03.26 |
---|---|
elasticsearch. leaf query (match, term, range) [엘라스틱 스택 개발부터 운영까지] (0) | 2023.03.12 |
elasticsearch. 역인덱싱과 분석기 [엘라스틱 스택 개발부터 운영까지] (0) | 2023.02.25 |
elasticsearch. 문자열 타입 (텍스트 타입 / 키워드 타입 / 멀티 타입) [엘라스틱 스택 개발부터 운영까지] (1) | 2023.02.19 |
elasticsearch. elasticsearch / kibana 설치 (맥 os) (1) | 2023.01.30 |