Elastic Search
Elastic Search¶
ES Basic¶
참고: https://victorydntmd.tistory.com/311 참고: https://victorydntmd.tistory.com/312
Cluster¶
- ES의 가장 큰 시스템 단위. node의 집합
- 클러스터는 여러 노드의 집합. 최초 설치시엔 master 노드만 존재함
- primary shard: 데이터 저장시 나눠진 파티션. 설치시 5개가 존재
- replica shard: 고가용성을 위해 존재하는 primary shard의 복제본. 설치시 1개 존재
- primary - replica 는 각기 다른 노드에 존재함.
- 정리하자면
- Cluster: 노드의 집합
- Node: shard의 집합
- Shard: 데이터를 저장하는 곳.
Index, Type, Document¶
- Index: 1개 이상의 primary shard에 매핑. 0개 이상의 replica shard를 가질 수 있음.
- RDBMS의 DB와 같은 존재
- Type: DB의 테이블과 유사
- Document: DB의 row와 유사
QueryDSL¶
참고: https://victorydntmd.tistory.com/314
Query Context & Filter Context¶
- Query Context
- 해당 document가 query절과 얼마나 잘 일치하는가?
- _score를 통해 document가 얼마나 잘 일치하는지는 점수로 나타냄
- Filter Context
- 해당 document가 query절과 얼마나 잘 일치하는가
- true/false로만 반환하며, 점수 X
match_all / match_none¶
- 지정된 index의 모든 document.
match¶
- 텍스트/숫자/날짜를 통해 특정 검색어가 있는 모든 도큐먼트 조회
bool¶
- must: bool must 절 모든 쿼리가 일치하는 도큐먼트 조회
- should: bool should 절 모든 쿼리 중 하나라도 일치하는 도큐먼트 조회
- must_not: bool must_not 절에 지정된 모든 쿼리가 모두 일치하지 않는 도큐먼트 조회
- filter: must와 같이 filter 절에 지정된 모든 쿼리 일치하는 도큐먼트 찾으나, score 무시
term¶
- 역색인에 명시된 토큰 중 정확한 키워드가 포함된 document 조회
- 정확한 키워드로 검색하기에 full text search에는 적합하지 않음
- ES에서는 text 타입은 역색인을 함
- keyword 타입은 역색인 X
- term은 full text search에 안어울려. 이땐 match 써
terms¶
- 키워드 여러개 중 일치하는 document 조회
regexp¶
- 정규표현식 term 쿼리 사용 가능
- term level 쿼리로, 정확한 키워드 검색한다는 뜻!
검색 결과 가공하기¶
참고: https://victorydntmd.tistory.com/315
from/size¶
- pagination을 도입하기 위함
- from: 쪽수
- size: 게시글 수
sort¶
- 하나 이상의 특정 필드에 대한 정렬
- 기본 정렬은 _score 내림차순
_source filtering¶
- _source를 통해 데이터에서 특정 필드만 반환하도록 할 수 있음
- SELECT의 특정 컬럼 명시하는 것과 비슷
aggregation¶
- 집계를 의미. aggs 필드를 통해 document 갯수를 통계낼 수 있음
- SQL의 group by와 유사
Aggregation¶
참고: https://www.elastic.co/guide/en/elasticsearch/reference/6.7/search-aggregations.html 참고: https://esbook.kimjmin.net/08-aggregations/8.1-metrics-aggregations
개요¶
- 서치쿼리에 기반하여 aggregated data를 제공
- Bucketing
- 각 버킷은 특정 키 - 도큐먼트로 연결
- 각 버킷은 모든 컨텍스트 내 도큐먼트와 평가되어 항목이 맞다면, 버켓으로 투입시킴.
- Metric
- 지표를 트래킹하기 위함
- Matrix
- 여러 필드에서 작동/요청된 문서 필드에서 행렬 결과 생성
- Pipeline
- 타 메트릭 출력을 집계
Aggregation 만들기¶
"aggregations": {
"aggregation_name: {
"aggregation_type": {
"aggregation_body"
}
[,"meta": {[<meta_data_body>]}]?
[,"aggregations": {[<sub_aggregation>]+ }]?
},
[,"<aggregation_name_2>": { ... } ](
}
Metrics Aggregations¶
- aggregate 해올 때, document는 쿼리문의 영향을 받아 이를 기반으로 산정
- min/max/sum/avg => stats로 한번에 가져올 수도 있음!
- percentiles/percentile_ranks
Bucket Aggregations¶
- 주어진 조건으로 분류된 버킷을 만들고, 각 버킷에 소속되는 도큐먼트를 모아 그룹으로 구분
- doc_count에 기본 표시됨
- range
- 각 숫자 필드 값으로 범위를 지정, 각 범위에 해당하는 버킷을 만듦
- field 옵션에 해당 필드 이름 지정, ranges - from, to 사이에 버킷 안에 넣을 친구들 지정 가능
- histogram
- range와 유사하게 숫자 필드의 범위를 나누는 aggs
- interval 옵션으로 주어진 간격 크기대로 버킷 구분 가능
- date_range, date_histogram
- 날짜 필드를 기반으로 범위별 버킷 생성도 가능
- terms
- keyword 필드의 문자열을 기반으로 버킷을 나누어 집계!
- keyword 필드값으로만 사용이 가능!!!!
- 형태소 분석으로 역색인 들어간 text에는 사용 X