ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [3장] 엘라스틱 서치 기본
    책/엘라스틱_스택_개발부터_운영까지 2022. 2. 28. 22:03

    내용정리

    인덱스와 도큐먼트

    • 인덱스: 도큐먼트를 저장하는 논리적 구분자
    • 도큐먼트: 실제 데이터를 저장하는 단위
    • 클러스터----(n)인덱스----(n)도큐먼트----(n)필드
    MySQL 엘라스틱서치
    테이블 인덱스
    레코드 도큐먼트
    컬럼 필드
    스키마 매핑
    • 동일한 인덱스에 있는 도큐먼트는 동일한 스키마
    • 도큐먼트는 반드시 하나의 인덱스에 포함되어야 함
    • 도큐먼트 수정, 삭제는 비용이 많이 든다

    벌크 데이터

    • bulk API는 읽기는 지원하지 않음(생성,삭제,수정만 지원)
    • ndjson 형식을 사용(라인이나 쉼표 주의, json과 문법 다름 -> json 형태로 포맷팅하면 작동하지 않음)

    매핑

    • 다이나믹 매팽
    • 명시적 매핑
    • 저장할 데이터를 확실히 안다면 명시적 매핑이 좋음
    • 이미 정의된 필드를 수정하거나 삭제할 수 없음(주의할 것!)
    • 새로운 필드 추가는 가능
    • text: 텍스트를 작은 단위로 분리
    • keyword: 정렬이나 집계에 사용. 원문을 통째로 인덱싱 (enum처럼 많지 않은 값이 반복되어 사용되는듯 싶다)
    • 멀티필드 지원하여 text, keyword 타입 둘 다로 설정 가능

    텍스트 타입

    • 문장이나 여러 단어가 나열된 문자열에 주로 사용
    • 분석기에 의해 토큰으로 분리되고, 토큰이 인덱싱 됨 => 역인덱싱
    • 역인덱스에 저장된 토큰 == 용어
    • 문장의 첫 문자열이 아닌 분해된 용어를 기준으로 정렬함

    키워드 타입

    • 유의미한 값들의 집합, 범주형 데이터에 주로 사용
    • 부분 일치 검색은 어렵지만 완전 일치 검색에 사용
    • 집계나 정렬
    • 용어 분리할 필요가 없음

    인덱스 템플릿

    • 파티셔닝 되는 인덱스들은 설정이 같아야 함
    • 템플릿을 만들기 전에 이미 존재하던 인덱스는 템플릿 적용되지 않음
    • 삭제도 템플릿이 삭제되는 것일 뿐 기존 데이터가 삭제되진 않음
    • 우선순위가 높은 템플릿으로 덮어쓰기 됨(priority 숫자의 크기가 클수록 높은 우선순위, 7.8이상버전부터 지원)
    • 다이나믹 템플릿도 있음

    분석기

    • 분석기 = [ 캐릭터 필터(n) ---> 토크나이저 ---> 토큰 필터(n) ]
    • 하나의 토크나이저가 필수로 포함되어야 함
    • 캐릭터 필터, 토큰 필터는 옵셔널
    • 토큰: 분석기 내부에서 일시적으로 존재하는 상태. 잘린 단위
    • 용어(term): 인덱싱 되어 있는 단위. 검색에 사용되는 단위. 인덱스에 저장되는 상태의 토큰들
    • 캐릭터 필터: 문자열을 변경하거나 제거. 전처리 역할. 엘라스틱서치가 제공하는 대부분에 분석기에는 캐릭터 필터가 불포함
    • 토크나이저: 토큰으로 분리
    • 토큰 필터: 분리된 토큰의 필터작업(대소문자 구분, 형태소 분석 등). 배열의 첫번째 순서부터 적용되므로 순서가 중요
    • 분석기 종류: standard, simple, whitespace, stop 등등..
    • 커스텀 분석기 사용 가능

    스터디

    • 엘라스틱서치 기본 사용법을 하나하나 따라해볼 수 있어서 흥미로운 부분들이 꽤 있었다.
    • 기존에 작업하면서 string 타입인 text, keyword 차이가 궁금했는데 중요한 특징을 가지고 있다.
    • 분석기를 통해서 인덱싱 되는 값들을 커스텀 할 수 있는 부분도 흥미로움
    • 기존에 키바나에서 콘솔 지원해주는지 모르고 postman 사용해서 api 보냈었는데 여러 탭 켜놓고 사용할 수 없는건 좀 불편하지만 자동완성도 해주고, 문법체크도 해주고 좋다!
    • ndjson 형식을 사용하는 이유는 대량으로 넣는 작업에 최적화되어서 사용된다! 스트리밍 할 땐 단건으로 가져가는 것이 편하기 때문이라고 한다. 참고링크 (ndjson 는 json이랑 비슷하게 생겼지만 문법이 다르게 사용되는 부분 좀 유의)
    • 트랜잭션을 지원하지 않지만, 기존 RDB에서도 bulk작업에 대해서는 트랜잭션을 지원하지만 온전한 트랜잭션을 의미상 지원한다고 보기 어렵다. 예시) 10000의 작업이 있다면 1000개씩 10번의 작업이 진행될텐데 1000개의 1단위에 대해서는 트랜잭션 단위로 롤백이 되지만, 10000건에 대해서는 끊어지기 때문에 결국 데이터 정합성이 중요해지면 기존 진행된 벌크 데이터를 삭제하고 다시 10000건의 데이터를 넣는 작업을 진행하기 때문이다.
    • 노리라는 한글 형태소 분석기를 사용할 수도 있다.(https://esbook.kimjmin.net/06-text-analysis/6.7-stemming/6.7.2-nori) 생각보다 한글 형태소 분석기를 원하는 대로 사용하기는 쉽지 않아 보였다.
    • 스터디링크

    댓글

Designed by Tistory.