Tags
- 축복이
- 전시
- 우리에프아이에스
- Python
- 전주
- 대만
- 사진
- 17-55
- 우리fis아카데미
- 대만여행
- 맛집
- 건담
- CS231n
- 여행
- 카페
- ai_엔지니어링
- 제주도
- 수요미식회
- 시청
- 축복렌즈
- 650d
- SQL
- 도쿄
- k-디지털트레이닝
- 우리fisa
- fdr-x3000
- 오사카
- 해리포터
- 군산
- 글로벌소프트웨어캠퍼스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Today
- Total
Recent Posts
300x250
브렌쏭의 Veritas_Garage
[Elastic] QueryDSL 본문
QueryDSL
QueryDSL은 자바에서 사용할 수 있는 쿼리 빌더 라이브러리이다.
SQL을 자바 코드로 작성할 수 있어서,
쿼리문을 문자열로 작성하는 것보다 가독성이 높아진다.
또한, 컴파일 시점에 쿼리 오류를 잡을 수 있어서 안전하다.
Elastic Search & Query DSL
- Elastic Search는 Query DSL을 사용하여 검색을 수행한다.
- Query DSL은 JSON 형태로 쿼리를 작성한다.
- Query DSL은 다음과 같은 구조로 이루어져 있다.
- Query: 검색할 데이터를 지정한다.
- Filter: 검색 결과를 필터링한다.
- Aggregation: 검색 결과를 집계한다.
- Sort: 검색 결과를 정렬한다.
- Highlight: 검색 결과 중 일부를 강조한다.
- Source Filtering: 검색 결과 중 일부 필드만 가져온다.
Query DSL 예시
{
"query": {
"match": {
"title": "elasticsearch"
}
},
"sort": [
{
"date": "desc"
}
]
}
With REST API
Query DSL은 REST API를 통해 사용할 수 있다.
REST API 예시
GET /_search
{
"query": {
"match": {
"title": "elasticsearch"
}
},
"sort": [
{
"date": "desc"
}
]
}
Match AND Term Query
Match 쿼리와 Term 쿼리를 조합하여 검색할 수 있다.
Match 쿼리는 텍스트를 기반으로 검색하고,
Term 쿼리는 정확한 값으로 검색한다.
Match AND Term Query 예시
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "elasticsearch"
}
},
{
"term": {
"tag": "search"
}
}
]
}
}
}
Range Query
Range 쿼리는 범위를 지정하여 검색할 수 있다.
- gte: 이상, gt: 초과, lte: 이하, lt: 미만
- format: 날짜 형식을 지정할 수 있다.
- time_zone: 시간대를 지정할 수 있다.
- boost: 가중치를 지정할 수 있다.
- relation: 겹치는 범위를 지정할 수 있다.
Range Query 예시
{
"query": {
"range": {
"date": {
"gte": "2021-01-01",
"lte": "2021-12-31",
"format": "yyyy-MM-dd",
"time_zone": "+09:00",
"boost": 2.0,
"relation": "within"
}
}
}
}
가중치
- 가중치를 지정하면 검색 결과의 순서를 조절할 수 있다.
- 가중치가 높은 문서가 먼저 나타난다.
Bool Query
Bool 쿼리는 여러 쿼리를 조합하여 검색할 수 있다.
- must: 모든 쿼리가 일치하는 문서를 검색한다.
- should: 적어도 하나의 쿼리가 일치하는 문서를 검색한다.
- must_not: 쿼리가 일치하지 않는 문서를 검색한다.
- filter: 쿼리가 일치하는 문서를 검색한다.
- minimum_should_match: should 쿼리의 최소 일치 개수를 지정할 수 있다.
Bool Query 예시
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "elasticsearch"
}
}
],
"should": [
{
"term": {
"tag": "search"
}
}
],
"must_not": [
{
"range": {
"date": {
"lt": "2021-01-01"
}
}
}
],
"filter": [
{
"range": {
"date": {
"gte": "2021-01-01"
}
}
}
],
"minimum_should_match": 1
}
}
}
Aggregation
Aggregation은 검색 결과를 집계할 수 있다.
- terms: 특정 필드의 값을 그룹화한다.
- range: 범위를 지정하여 그룹화한다.
- date_histogram: 날짜를 기준으로 그룹화한다.
- avg: 평균 값을 계산한다.
- sum: 합계 값을 계산한다.
- min: 최소 값을 계산한다.
- max: 최대 값을 계산한다.
- stats: 평균, 합계, 최소, 최대 값을 계산한다.
- cardinality: 고유한 값을 계산한다.
HyperLogLog
HyperLogLog은 고유한 값을 추정하는 알고리즘이다.
- 정확한 값을 계산하지 않고, 추정값을 계산한다.
- 메모리 사용량이 적다.
- 집합의 크기가 커질수록 정확도가 높아진다.
HyperLogLog 예시
{
"aggs": {
"unique_count": {
"cardinality": {
"field": "user_id"
}
}
}
}
Comments