ElasticSearch
: 검색에 자주 쓰이는 검색 엔진
특징
- 검색 엔진, 데이터 저장소, 분석 엔진으로 활용 가능하다.
- json 형식으로 저장되고 사용된다. (non schema)
- 데이터 CRUD 작업은 REST API를 통해 수행한다.
- index를 여러 shard로 나누어 data를 여러 node로 분산하는 접근 방식을 이용한다.
- 구조: 클러스터로 구성되며, 클러스터 안에 노드, 노드 안에 인덱스, 인덱스 안에 샤드, 샤드 안에 세그먼트로 구성된다.
- 검색속도가 빠른 이유: 역색인 자료 구조로 인해 빠르다. (* 역색인: 키워드를 통해 무너를 찾아내는 방식)
구성
- Physical 구성
Cluster > Node (검색서버) > Index (테이블) > Shard (데이터 분류) > documents (데이터)
- Logical 구성
Index > Type > Document > field:value
Elasticsearch vs RDB
SQL | Query DSL |
select * from type_name limit 0/10 | "match_all" : {} ... "from" : 0, "size" : 10 |
select field1, field2 from type_name where search_field='elasticsearch' | "term" : { "search_field" : { "value" : "elasticsearch" } } ... "fields" : [ "field1", "field2" ] |
select * from type_name where search_field > '222' order by search_field desc | "range" : { "search_field" : { "gt" : "222" } } ... "sort" : [ { "search_field" : { "order" : "desc" } } ] |
ELK (Elasticsearch, Logstash, Kibana)
주로 흩어진 로그를 한곳으로 모아서, 원하는 데이터를 빠르게 검색하고 시각화하고 모니터링하기 위해 사용한다.
- Logstash: 다양한 소스(DB, csv 파일 등)의 로그 또는 트랜잭션 데이터를 수집, 집계, 파싱하여 Elasticsearch로 전달
- Kibana: Elasticsearch의 빠른 검색을 통해 데이터를 시각화 및 모니터링
Queries vs Filters
- Query 대신 filtered query와 filter를 사용한다
- and, or, not filter 대신 boll filter를 사용한다
쿼리 컨텍스트
: 질의에 대한 유사도를 계산해 이를 기준으로 정확한 결과를 먼저 보여줌
연관성에 대한 스코어 결과 제공
{
"query" : {
"match" : {
"category" : "clothing"
}
}
}
필터 컨텍스트
: 유사도를 계산하지 않고 일치 여부에 따른 결과만 반환
스코어를 계산하지 않고 예/아니오 결과만 제공
{
"query" : {
"bool" : {
"filter" : {
"day_of_week" : "Friday"
}
}
}
}
쿼리 스트링
: 간단한 쿼리를 GET 형식으로 URI 작성하여 조회 가능하다
ex) http://~/_search?q=customer:Mary
쿼리 DSL
: 복잡한 쿼리를 POST 형식으로 Body에 작성하여 조회 가능하다
참고
728x90
반응형
'DATA > ElasticSearch' 카테고리의 다른 글
[ES] match vs term (0) | 2024.11.06 |
---|---|
[Line Music 발표영상 공부] 대규모 음악 데이터 검색 기능을 위한 Elasticsearch 구성 및 속도 개선 방법 (0) | 2023.08.05 |
EFK 로그 수집 아키텍처 Elasricsearch + Fluentd + Opendashboard (0) | 2023.01.12 |
ElasticSearch Cluster와 Node (0) | 2023.01.08 |
댓글