-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Labels
technical기술 문서 작성기술 문서 작성
Description
Elasticsearch vs RDBMS ‘LIKE’
- RDMBS
- user테이블의 name에 홍길동이 존재할때
- 인덱스 사용
- select * from user where name LIKE ‘홍길동%’ 빠르게 검색 가능
- 인덱스 사용불가
- select * from user where name LIKE ‘%길동%’ 전체 테이블 스캔이 필요→성능저하
- 인덱스 사용
- user테이블의 name에 홍길동이 존재할때
- Elasticsearch
- 전문검색엔진. ‘길동’과 같은 복잡한 검색을 효율적으로 할 수 있음
- {"match": {"name": "길동"}}로 빠르게 검색 가능
- 색인전 토큰화를 수행하기 때문에 맞춤형 검색이 가능하다.
- RDBMS에서 불가능한 비정형 데이터의 색인과 검색이 가능하다.
- 형태소 분석을 통해 자연어 처리가 가능하다.
- 동의어나 유의어를 활용한 검색이 가능하다.
- 역색인 지원으로 매우 빠른 검색이 가능하다.
- 단점으로는 인덱싱이 필요하기 때문에 실시간 처리는 불가능하다.
- 전문검색엔진. ‘길동’과 같은 복잡한 검색을 효율적으로 할 수 있음
ELK 스택
- 동작방법
- Logstash는 서버 사이드 데이터 처리 파이프라인으로, 다양한 소스에서 동시에 데이터를 수집, 변환, 그리고 Elasticsearch 같은 저장소에 전송합니다. 입력, 필터, 출력 플러그인을 사용하여 데이터를 원하는 형태로 가공할 수 있습니다.
- Elasticsearch**:** 분산형 검색 및 분석 엔진입니다. JSON 형태의 데이터를 저장하고, 빠르게 검색하고, 복잡한 쿼리를 실행하여 데이터를 분석할 수 있습니다. 또한, 대규모 데이터셋에 대한 실시간 분석과 검색 기능을 제공합니다.
- Kibana는 Elasticsearch에 저장된 데이터를 시각화하고 탐색하기 위한 웹 기반 인터페이스입니다. 대시보드를 생성하여 데이터를 시각적으로 분석하고, 실시간으로 데이터를 모니터링할 수 있습니다.
Elasticsearch
- 설명
- 인덱스: 데이터의 저장공간, 하나의 인덱스는 하나의 타입만 가진다
- 7.0버전부터는 기본적으로 1개/1개이다
- 샤드
- 색인된 문서는 하나의 인덱스에 담긴다.
- 인덱스 내부에 색인된 데이터는 물리적인 공간에 여러 개의 파티션으로 나누어 구성되는데, 이 파티션을 샤드라고 부른다.(자동으로 생성된다)
- 레플리카샤드는 프라이머리샤드에서 CUD작업을 처리하고 데이터가 복제됨, 읽기작업을 분산처리함
- 문서
- 엘라스틱서치에서 데이터가 저장되는 최소단위. 기본적으로 JSON 포맷으로 저장됨.
- DB에서 테이블의 행이 엘라스틱서치의 문서에 해당한다.
- 중첨 구조를 지원해 문서 안에 문서 지정 가능
- 필드
- 문서를 구성하기 위한 속성
- DB 에서의 컬럼과 비교할 수 있으나 컬럼은 정적인 데이터 타입인 데 반해, 필드는 동적인 타입이다.
- 하나의 필드는 목적에 따라 다수의 데이터 타입을 가질 수 있다.
- ex) 영화 정보를 담아둔 문서에 제목 필드가 있다고 가정, 제목 검색시 매칭 검색을 하거나, 초성을 이용한 검색이 모두 지원되도록 제목필드는 2개의 데이터 타입을 가져야한다.
- 매핑
- 문서의 필드와 필드 속성을 정의하고 그에 따른 색인 방법을 정의하는 프로세스다.
- 필드타입
- Keyword
- 별도의 분석기를 거치지 않고 원문 그대로 색인
- Text
- 색인시 지정된 분석기가 칼럼의 데이터를 문자열 데이터로 인식하고 분석한다.
- 별도 분석기 미설정시 기본으로 Standard Analyzer를 사용한다.
- 전체 텍스트가 토큰화되어 생성되며 특정 단어를 검색하는 것이 가능해진다.
- Keyword
- 문서ID를 미지정하면 UUID를 통해 무작위로 생성된다.
- 엘라스틱서치와 동기화된 DB에 데이터가 변경되었을 경우, 검색엔진은 해당 db와 주기적으로 동기화해야 하기 때문에 변경된 내용을 따라 동기화돼야 한다.
- 이를 위해 엘라스틱에 색인된 _id값을 1만건 그 이상일 텐데 DB의 PK 같은 식별되는 키값과 매칭된 정보가 별도로 저장해야하는건 불가능하다. 따라서 DB의 고유값과 맞춰주는게 좋다.
- 검색
- HTTP URI 형태의 파라미터를 URI에 추가해 검색하는 방법
- RESTful API 방식인 QueryDSL을 사용해 요청 본문(body)에 질의내용 추가해 검색하는 방법
- spring data elasticsearch
- 필터
- Html strip char 필터
- 역색인
- 설명
- 일반적인 색인이 문서에서 단어를 찾아 문서 번호를 리스트업하는 방식이라면, 역색인은 그 반대로 각 단어가 어떤 문서에 등장하는지를 기록한다. 검색하고자 하는 단어가 주어졌을 때, 해당 단어를 포함하고 있는 모든 문서를 빠르게 찾아낼 수 있게 해줍니다.
- 방법
- 문서를 토큰화하여 개별 단어로 분해합니다.
- 각 단어에 대해 해당 단어가 등장하는 문서의 ID와 위치를 기록합니다.
- 이 정보를 바탕으로 단어별로 문서의 리스트를 만들어, 단어를 키(key)로 하고 문서 리스트를 값(value)으로 하는 역색인을 생성합니다.
- 설명
- 인덱스: 데이터의 저장공간, 하나의 인덱스는 하나의 타입만 가진다
- 토크나이저
- type: ngram
- 설정된 min_gram, max_gram 범위에 따라 텍스트를 분리한다.
- 부분 문자열 검색을 가능하게 하여 검색 유연성이 증가된다.
- type: nori_tokenizer
- 한국어 텍스트를 분석하고, 복합명사를 기본형태와 분해된 형태로 토큰화 한다.
- decompound_mode가 mixed로 설정되어, 복합명사는 원형과 분해된 형태 모두 토큰으로 생성
- type: ngram
- 필터
- type: nori_part_of_speech
- stoptags와 일치하는 토큰을 찾아 제거한다(감탄사, 조사 등. 커스텀 가능)
- type: synonym
- 미리 준비된 파일을 통해 동의어 처리를 수행. 정확성을 높일 수 있다.
- type: nori_part_of_speech
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
technical기술 문서 작성기술 문서 작성
Type
Projects
Status
Done