Elasticsearch는 루씬(Lucene) 기반의 오픈소스 검색엔진이다. Elasticsearch는 JSON 기반으로 문서를 저장하고 검색할 수 있으며 분석 작업도 가능하다. Elasticsearch의 특징 1. 준실시간 검색 시스템 Elasticsearch는 실시간이라고 생각될 만큼 색인된 데이터가 빠르게 검색된다. ES는 환경설정값에서 refresh_interval 이라는 것이 있는데 얼마나 빨리 검색될 수 있도록 할것인지를 설정할 수 있는 값을 기본값으로 1초로 지정되어있다. 2. 고가용성을 위한 클러스터 구성 한 대 이상의 노드로 클러스터를 구성하여 높은 수준의 안정성을 달성하고 부하 분산이 가능하다. 3. 동적 스키마 생성 RDB와는 다르게 입력될 데이터들에 대해 미리 스키마를 정의하지 않아..
회사 프로젝트에서 작업할 때 무심코 ES에서 Query를 사용할 때 무심코 모든 데이터를 다가져와서 사용했었는데 조회하는 데이터 사이즈가 상당히 큰 사이즈라서 성능이슈를 발생시킬 수 있다는 피드백을 받았다. 아래는 성능이슈를 발생시킬 수 있던 쿼리이다. GET camo_al_was_acc_log/_search { "from": 0, "size": 10000, "query": { "bool": { "must": [ { "range": { "str_time_ui": { "from": "2022-09-22 14:28:31", "to": "2022-09-22 23:59:47", "include_lower": true, "include_upper": true, "format": "yyyy-MM-dd HH:mm:s..
POST sec/_delete_by_query { "size": 1, "query": { "range": { "systemtime": { "from": null, "to": "2022-01-16 00:00:00", "include_lower": true, "include_upper": true, "format": "yyyy-MM-dd HH:mm:ss", "boost": 1 } } }, "_source": false } 결과 이렇듯 ElasticSearch에서는 delete 쿼리를 날릴때 size가 설정되어있다고하여 size 개수만큼만 삭제되는게 아니다. size는 무시해도된다.
get 요청에서 _mapping 명령어 사용시 각 필드의 데이터 타입이 무엇인지 확인 할 수 있다. GET camo_system_logs/_mapping { } { "camo_system_logs" : { "mappings" : { "properties" : { "cluster" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "cpu_usage_per" : { "type" : "float" }, "disk_total" : { "type" : "long" }, "disk_usage" : { "type" : "long" }, "host" : { "type" : "text", "fiel..
ElasticSearch를 이용하다보면 가끔씩 필드 속성제한을 해제할 필요가 있다. 그럴때 아래와 같은 명령어를 통해서 설정할 수 있다. PUT test_index/_settings { "index.mapping.total_fields.limit": 2000 } 그리고 Aggreagation 의 요청 처리속도는 size 설정이 영향을 미치지 않는다. "query": { "bool": { "must": [ { "range": { "systemtime.keyword": { "from": "2022-02-25 00:00:00", "to": null, "include_lower": true, "include_upper": true, "format": "yyyy-MM-dd HH:mm:ss", "boost": 1 ..
엘라스틱서치에서 DSL이란 Domain Specific Language 으로 JSON에 기반한 질의어를 말한다. 결국 데이터베이스처럼 사용자가 원하는 데이터를 추출하기 위한 질의 언어라는 뜻이다. 엘라스틱서치에서 기본적으로 질의를 하려면 아래와 같이 "query" 속성을 사용한다. GET camo_system_logs/_search { "query": { "range": { "systemtime.keyword": { "lt": "now" } } } } Query VS Filter DSL 기능이 어떤게 있는지 설명에 앞서 query와 filter간 차이점은 다음과 같다. 기본적으로 Elastic search는 일치하는 검색 결과의 관련성을 점수 별로 정렬하여 각 문서가 쿼리와 얼마나 잘 일치하는지 측정한다..