일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 |
30 | 31 |
- 고급매핑
- 컨베이어 벨트 위의 로봇 Python
- 코틀린
- 13460 구슬탈출 2
- 객체 지향 설계와 스프링
- Kotlin in action 5장
- KotlinInAction
- 스프링 핵심 원리 - 기본편
- 20055 컨베이어 벨트 위의 로봇
- Kotlin in action 10장
- 백준 20055 컨베이어 벨트 위의 로봇
- 자바 ORM 표준 JPA 프로그래밍 7장
- 스프링 컨테이너와 스프링 빈
- Python
- Kotlin
- Kotlin in action 6장
- 코틀린인액션
- spring
- 스프링 핵심 원리 이해
- 기능개발 python
- kotlin in action 정리
- 20055
- 스프링 핵심 원리
- 코틸린인액션
- 백준
- 7장 고급매핑
- 백준 13460 Python
- Kotlin In Action
- Kotlin in action 3장
- 싱글톤 컨테이너
- Today
- Total
목록개발/Elasticsearch (12)
기록하는 습관
참고) Reindex 관련 글: https://flexiblecode.tistory.com/157 Elasticsearch (3) - reindex ** Elasticsearch를 공부하며 정리한 글입니다. Elasticsearch에서는 인덱스 매핑 정보가 바뀌면 업데이트 하는 과정이 어렵다. reindex를 통해 다시 인덱스 생성을 한 후 reindex api 호출을 통해 기존 인덱 flexiblecode.tistory.com Update By Query 기능 조건에 맞는 필드를 탐색 후 업데이트 사전을 반영하는 문서 재색인 ES 사전 반영을 위해서는 2가지 방법을 사용할 수 있다. Update By Query API 사용 사전 반영을 위해서 update by query API 호출 전 index를 c..
Tokenizer : 문장을 정해진 기준(공백 등)으로 분리하여 token을 생성하는 작업. nori tokenizer nori 형태소 분석기를 사용하는 토크나이저 whitespace 공백 기준으로 분리하는 토크나이저 keyword 입력된 문장이나 단어 그 자체를 토큰으로 만드는 토크나이저 standard lowercase + whitespace 를 수행하는 토크나이저 Token Filter : Tokenizer로 분리된 token들을 원하는 형태로 가공하는 작업. # index 구성 nori_crawl, nori_crawl_hanspell Tokenizer type: nori_tokenizer를 사용하여 nori 형태소 분석기로 토크나이징 진행 user_dictionary: 사용자 사전을 정의했다. d..

ES with English 분석 분석 문장: “It's my PReTty.hat_Yellow! $20.12 15.5% on sale. i ate pizza” ** Tokenizer로 분류 1. Standard 공백으로 텀을 구분하면서 일부 특수문자 제거 Filter Result 분석 속도 - It’s my, PReTty.hat_Yellow, 20.12, 15.5, on, sale, i, ate, pizza 4ms lowercase It's, my, pretty.hat_yellow, 20.12, 15.5, on, sale, i, ate, pizza 4ms Stemmer It’, my, PReTty.hat_Yellow, 20.12, 15.5, on, sale, i, at, pizza 특징: It’s -> ..
Elasticsearch Client 실무에선 대량의 요청을 처리하기 위해 ES에 접근할 때 전용 클라이언트 모듈을 많이 사용한다. Rest Client Java High Level REST Client 라고도 불림 HTTP 방식 사용 내부적으로 HttpClient 모듈 사용 Transport Client Java Client 라고도 불림 초기부터 제공되던 클라이언트 방식으로, 상대적으로 빠른 속도를 보장함. Socket 이용 내부적으로 Netty 모듈 사용 ** ES 7.0 이후 부터는 Transport 클라이언트가 폐기 되었기 때문에 REST 클라이언트를 사용해야 함.!! Rest Client를 사용하는 이유 - Transport 클라이언트의 요청: JSON 파싱 -> 자바 객체로 변환 -> Tran..
Elasticsearch Shard 최적화 운영 중에 shard의 개수를 수정하지 못하는 이유 - ES Shard는 Lucene index의 확장. - 각 shard는 내부에 독립적인 Lucene 라이브러리를 가지고 있고, Lucene은 단일 머신 위에서만 동작(Stand Alone)하는 검색엔진임. - shard 내부의 Lucene 입장에서는 함께 인덱스를 구성하는 다른 shard의 존재를 모름! - 프라이머리 shard의 개수를 변경한다는 것 == 독립적인 Lucene이 가지고 있는 데이터를 모두 재조정 한다는 뜻. o 이는 세그먼트를 재조정 해야 하는데, 세그먼트의 불변성 때문에 불가능함. 1. Index를 생성할 때 한 번 설정된 shard의 개수는 절대!! 변경이 불가능하므로 데이터의 크기가 최..

Elasticsearch와 Lucene Elasticsearch는 Shard 내부에 Lucene library를 가지고 있음 Elasticsearch는 각 shard가 가지고 있는 Lucene을 제어할 수 있으며, 실시간 검색에 가깝게 동작하기 위해 주기적으로 인메모리 버퍼에 대해 Flush 작업을 수행함 Lucene: 다수의 class로 구성된 검색 library이다. 중요한 class IndexWriter : 데이터를 색인하는 클래스 IndexSearcher : 색인된 데이터를 검색 결과로 제공하는 클래스 Lucene 인덱스 내부에는 Segment 자료구조가 다수 존재. Segment를 이용해 검색을 수행함 Segment는 역색인 구조. Lucene 인덱스의 한계 데이터를 저장할 때 물리 머신이 제공..

노드의 종류 마스터 노드(Master node) 노드 추가/제거 등의 클러스터 전반적인 관리 네트워크 속도가 빠르고 지연이 없는 노드를 마스터 노드로 선정하는 것이 좋음. 이유: 인덱스 생성, 삭제 등 클러스터와 관련된 전반적인 작업을 담당하므로. 마스터 노드는 1개만 존재. 만약, 마스터 노드가 down 되면 다른 후보들 중 하나 선택해서 역할을 수행 데이터 노드(Data node) 실질적인 데이터 저장 검색과 통계 같은 데이터 관련 작업 수행 데이터가 실제로 분산 저장되는 물리적 공간인 shard가 배치되는 노드 색인 작업은 CPU, memory, computing resource를 많이 소모하므로 resource monitoring이 필요함. 색인할 문서의 수가 적으면 마스터 노드와 함께 구성해도 ..

기본 용어 클러스터(Cluster) 물리적인 node 인스턴스들의 모임 모든 node의 검색과 색인 작업을 관장하는 logical 개념 Index의 Document를 조회 할 때: master node를 통해 n개의 node를 모두 조회해서 각 data를 취합 후 결과를 하나로 합쳐서 반환함. 가용성, 확장성 측면에서 유연함 이유: cluster에 있는 node는 실시간 추가/제거가 가능하기 때문 인덱스(Index) 독립적인 데이터 저장 공간 하나의 index는 하나의 type만 가짐. 하나의 물리적인 노드에 여러 개의 논리적인 index 생성 가능. 만약 ES를 분산 환경으로 구성하면, 하나의 index가 여러 node에 분산되어 저장됨. Index 이름은 모두 소문자여야 함. Index가 없는 상태에..