반응형
kibana

kibana

    Nested field에 대한 대체 필드 flattened type

    일반적으로 하나의 공통 Document내에 서로 다른 속성을 가지고 있어서 별도의 Document인 것 처럼 저장하고 query하기 위해서 우리는 nested obejct 타입을 많이 사용한다. 사용했었던 예로는 가게 - 메뉴, 상품 - 아이템 정도이다. 하지만 nested 필드의 개수만큼 내부적으로 별도의 도큐먼트로 분리되어 저장이 되고 쿼리 시 상위 도큐먼트와 합쳐져서 보여줘야하는 등에 여러 이유로 nested 필드는 많이 느리다. Elasticsearch nested type설명에도 flattened type을 고려해보라고 써있는거 보면 얼마나 좋지 못한지 사용해보지 않아도 가늠해 볼 수 있다. (실사용에서도 퍼포먼스를 극대화 해도 쉽지 않았다.) 그래서 성능이슈를 해결해보고자 찾던 중 7.3 버전..

    Elasticsearch node 종류와 기본 설정 옵션

    Elasticsearch의 노드 Elasticsearch의 인스턴스를 시작하는 동시에 노드도 같이 시작된다. 노드들을 연결해놓은 것을 클러스터라고 한다. 만약 하나의 엘라스틱 서치 노드만을 실행시킨 경우도 하나의 노드를 가진 클러스터라고 한다. 클러스터안에서 모든 노드는 HTTP와 Transport 트래픽을 기본적으로 다룬다. Transport 레이어는 오로지 노드들과 Java TransportClient와의 통신에만 사용된다. Http 레이어는 오직 외부 Rest Cliente들과 통신할 때 사용된다. 모든 노드는 클러스터 안에서 서로 다른 노드들에 대하여 알고 있고 client에 요청을 적적한 노드로 향하게 조절해준다. 기본적으로 노드는 master-eligible, data, ingest, mach..

    Elasticsearch version conflict 에러

    배치를 이용해서 Elasticsearch에 데이터를 삽입하던 중 version conflict라는 오류가 자주 발생했다. 처음에는 Elasticsearch 버전이 동일한데 왜? 오류가 나는지 몰랐다. 그래서 검색해보니 인덱스안에 document에는 각자 관리하는 version이 존재한다. 이 version은 document가 수정될 때 하나씩 올라가게 되는데 version이 10인 상태에 document에 여러 서버 모듈에서 해당 document에 업데이트를 하려고 하니 문제가 발생하였다. 그 이유는 version 10인 상태에서 작업에 들어간 두 모듈은 한 모듈이 먼저 11로 업데이트를 시키고 다음 모듈이 작업을 진행하려고 할 때 자기가 알고 있던 마지막 version인 10이 아니라 11로 바껴있는것..

    Elasticsearch reindex시 alias를 사용하여 무중단으로 진행하기 & big index 리인덱싱 시 비동기 처리 방법

    Elasticsearch reindex를 진행할 때, 단순하게 새로운 인덱스를 만들고 reindex api를 진행하고 기존 인덱스를 지우고 새로 만들어서 다시 reindex를 해줬다. (이전글: https://wedul.site/611?category=680504) 하지만 그것은 해당 인덱스의 document의 수가 적어서 금방 진행이 되었었고 만약 document수가 10만가지만 넘어도 생각보다 오래걸려서 서비스의 흐름이 끊어지게 된다는걸 인지하지 못했다. 같은 회사 동료분께서 해당 부분에 대해서 말씀해주셨고, 그 분이 가이드 해주신대로 진행해서 reindex를 무중단하게 진행하는 방법을 찾아봤다. Alias를 이용하여 reindex하기 기존 index wedul의 매핑구조이다. PUT wedul { ..

    Spring Boot에서 6.4 Elasticsearch 연결 및 간단 CRUD

    Elasticsearch를 Spring Boot에서 작업을 하는 간단한 정리를 해보자. 1. Library 추가Elasticsearch를 사용하기 위해서는 spring-data-elasticsearch 라이브러리가 추가되어야 한다. gradle에 추가해보자.1234567dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch' implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' compileOnly "o..

    docker logstash 설치 및 log 파일 elasticsearch에 기록

    ELK에서 logstash를 제외하고는 모두 경험해봤다.이제 logstash를 사용해서 log파일을 elasticsearch에 기록해보자. 설치elasticseach도 kibana도 pc에 직접 설치하고 싶지 않아서 docker에 설치해서 사용했다. logstash도 docker에 설치해서 사용해보자. 물론 logstash를 사용하기전에 elasticseach와 kibana가 설치되어 있어야한다. 설치법은 저번 게시물에 올려놨다. logstash를 이름을 지정해서 background에서 동작하도록 실행시킨다.1docker run --name logstash -d docker.elastic.co/logstash/logstash:6.4.0cs 설정파일logstash를 설치하면 내부에 다음과 같은 설정파일이 ..

    Elasticsearch에서 refresh 정리

    Elasticsearch에서 document를 업데이트하고 바로 해당 정보를 조회하려고 했다.하지만 조회가 되지 않았다. 분명이 업데이트가 종료된 것을 확인 했는데 왜 그런지 의문이 들었다. 그래서 찾아봤는데 document가 업데이트가 되고나서 인덱스에서 실제로 조회가 될 수있는 상태가 되기위해서는 일정시간이 필요한 것 같다.자세히는 모르지만 다시 인덱싱을 걸기 때문에 그러는건 아닌가 생각된다. 그래서 이런경우에 업데이트가 종료 되었다고 알리는 시간을 검색이 가능하게 변경된 시간까지 포함해서 알려주도록 하는 옵션이 존재한다. 그렇게 되면 업데이트가 되고 검색이 가능한줄 알고 프로그램을 작성하다가 버그가 발생하는 비율을 줄일 수 있다. 일반적인 bulkInsert나 update, create같은 명령에는..

    Elasticsearch에서 search_after 기능 사용하여 조회하기

    elasticsearch에서 search_after를 이용하여 데이터를 조회하는 방법을 정리해보자.우선 사용할 인덱스를 생성하자. 12345678910111213141516171819202122PUT wedul{ "mappings": { "cjung": { "properties": { "id": { "type": "keyword" }, "name": { "type": "text", "analyzer": "nori", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } } } }}Colored by Color Scriptercs 생성된 인덱스에 데이터 몇개만 삽입하여보자.123456789101112131415POST wedul/cju..

    Elasticsearch에서 Full text queries와 Term level queries 정리

    Elasticsearch를 사용하다보면 term과 match 관련된 쿼리에 대해 헷갈리는 경우가 많다. Document에 있는 내용을 가져와서 정리해보자. Full text queriesThe high-level full text queries are usually used for running full text queries on full text fields like the body of an email. They understand how the field being queried is analyzed and will apply each field’sanalyzer (or search_analyzer) to the query string before executing. match queryThe s..

    Elasticsearch query string 조회시 parse exception 에러 처리

    elasticsearch에서 query_string로 데이터 조회시에 쿼리문으로 ) 특수문자가 포함하여 조회했다. 하지만 다음과 같이 문제가 발생했다. 1234567891011{ "error": { "root_cause": [ { "type": "parse_exception", "reason": "parse_exception: Encountered \" \")\" \") \"\" at line 1, column 11.\nWas expecting one of:\n \n ...\n ...\n ...\n \"+\" ...\n \"-\" ...\n ...\n \"(\" ...\n \"*\" ...\n \"^\" ...\n ...\n ...\n ...\n ...\n ...\n ...\n \"[\" ...\n \"..

    엘라스틱 서치 (elasticsearch) fielddata

    엘라스틱 서치에서 aggregations를 사용하여 text 필드를 그룹화 하려고 했다. 하지만 이런 오류와 함께 사용이 되질 않았다.12Fielddata is disabled on text fields by default. Set fielddata=true on [your_field_name] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.cs 그래서 엘라스틱 서치 문서를 살펴보던 중 text 필드에 fielddata에 대해 알게 되었다. 대 부분의 필드 들은 기본적으로 자신의 필드가 검색가능하도록 인덱스 처리가 된다. 그러기 위해서..

    Elasticsearch 질의 DSL 정리

    엘라스틱 서치를 공부하면서 봤던 DSL 쿼리를 정리해보자. Query와 Filter의 차이Query는 일반적으로 Full Text Search(전문검색)에 사용되고 필터는 YES/NO 조건의 바이너리 구분에 주로 사용된다. 쿼리는 scoring이 계산되나 필터는 계산되지 않는다. 쿼리 결과는 캐싱되지 않고 필터 결과는 캐싱된다. 상대적으로 쿼리는 응답속도가 느리고 필터는 응답속도가 빠르다. term - term은 색인이 나눠지면서 형태소로 나누어지는 저장되는 토큰등을 term이라고 한다. term 쿼리는 주어진 질의문과 저장된 텀과 정확히 일치하는 문장을 찾는다. - term으로 "name" : "cjung gglee" 라고 입력하게 되는경우에는 "cjung gglee"라는 하나의 term을 찾기 때문에..

    인덱스 생성 및 데이터 삽입

    Elasticsearch에서 인덱스를 만들고 타입을 지정하여 데이터를 삽입하는 과정을 정리해보자. elasticsearch는 Restful API가 지원되기 때문에 BSL 쿼리를 이용하여 쉽게 데이터를 조작할 수 있다. 인덱스 생성Methd : put URLI : /{indexname}?pretty 생성된 인덱스 확인 Method : GET URI : _cat/indices?v kibana dev-tool에서 customer 인덱스가 생성된 것을 확인할 수 있다. 타입, Document 생성 및 데이터 추가 Method : PUT URI : /{indexname}/{typename}/[documentid]?pretty 만약 documentid를 넣지 않으면 랜덤으로 만들어서 삽입된다. 입력된 데이터 확인..

    Docker Container에 Elasticsearch와 데이터 시각화 kibana 설치 및 연동

    회사에서 사용하는 Elasticsearch 공부를 위해서 docker에 설치해보고 시각화에 도움주는 Kibana도 같이 설치해보자. 우선 Elasticsearch에 대한 기본 정보는 API 문서에서 확인할 수 있다. https://www.elastic.co/guide/kr/elasticsearch/reference/current/gs-index-query.html Elasticsearch 설치해당 이미지에는 xpack도 포함되어있다. xpack은 보안, 알림, 모니터링, 보고, 그래프 기능을 설치하기 편리한 단일 패키지로 번들 구성한 Elastic Stack 확장 프로그램이다. 우선 이미지를 내려받는다.1docker pull docker.elastic.co/elasticsearch/elasticsearc..

    Elasticsearch 기본 정리

    Definition- 엘라스틱서치는 색인 기능이 추가된 NoSQL DBMS이다.- Full Text Search(전문검색)과 문서의 점수화를 이용한 정렬, 데이터증가량에 구애받지 않는 실시간 검색 등을 제공- 여러개의 노드로 구성된 분산시스템이다. 각 노드는 데이터를 색인하고 검색기능을 수행하는 단위 프로세스이다. 각 노드는 복사본과 원본을 다른 위치에 저장하고 있어서 안전하다.- 검색 시 서로 다른 인덱스의 데이터를 바로 하나의 질의로 묶어서 여러 검색 결과를 하나의 출력으로 도출할 수 있는 멀티 테넌시를 제공한다.- 모든 데이터는 JSON 구조로 저장된다.- RestFul API를 지원하므로 URI를 사용한 동작이 가능. (이런 Restful api를 활용한 쿼리를 dsl 쿼리라고 한다.) 용어Ind..

반응형