일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- API
- 애자일프로그래밍
- 개발
- Baekjoon
- 알고리즘
- Java
- 코딩
- 데이터베이스
- 그리디
- 애자일
- spring boot
- database
- framework
- Elasticsearch
- 코드
- 애자일기법
- 읽기쉬운코드
- 그리디알고리즘
- 개발자
- 자바
- 엘라스틱서치
- 백준
- Spring
- JPA
- 클린코드
- 코딩테스트
- cleancode
- 스프링
- ES
- 프레임워크
- Today
- Total
목록Reading (29)
튼튼발자 개발 성장기🏋️
문장은 색인 시점에 텀으로 분해되고 검색 시 이 텀을 일치시켜야 검색이 가능해진다. [그림 1]은 색인 시점과 검색 시점의 기본적인 동작 과정을 표현한다. 엘라스틱서치는 색인 시점에 Analyzer를 통해 분석된 텀을 Term, 출현빈도, 문서번호와 같이 역색인 구조를 만들어 내부적으로 저장한다. 검색 시점에는 Keyword타입과 같은 분석이 불가능한 데이터와 Text타입과 같은 분석이 가능한 데이터를 구분해서 분석이 가능할 경우 분석기를 이용해 분석을 수행한다. 이를 통해 검색 시점에도 텀을 얻을 수 있으며 해당 텀으로 역색인 구조를 이용해 문서를 찾고 이를 통해 스코어 계산으로 결과를 제공한다. 검색 질의 표현 방식 엘라스틱서치에서 제공하는 검색 api는 질의(Query)를 기반으로 동작한다. 검색 ..
인덱스를 활용하기 위해서는 Document api를 사용할 수 있다. 엘라스틱서치에서는 인덱스 관리를 위해 Document api를 제공하는데 이를 이용해 문서를 조회하거나 추가/수정/삭제 등의 작업을 할 수 있다. 문서 파라미터 Document api에서는 다양한 파라미터를 지원한다. 이러한 파라미터는 Document api에서 공통적으로 사용할 수 있다. 문서 ID 자동생성 문서를 생성할 때는 각 문서를 구분하기 위해 ID가 반드시 필요하다. 만약 문서를 추가할 때 ID를 지정하지 않으면 엘라스틱서치가 자동으로 부여한다. 자동으로 생성되는 ID는 UUID 형태의 값으로 생성된다. 버전 관리 색인된 모든 문서는 버전 값을 가지고있다. 버전 정보는 색인할 때 결과에 포함된다. 최초 1을 갖게되고 문서를 ..
분석기는 전처리 필터를 이용한 데이터 정제후 토크나이저를 이용해 본격적인 토큰 분리 작업을 한다. 그 다음 생성된 토큰 리스트를 토큰 필터를 통해 재가공하는 3단계 방식으로 동작한다. 하지만 토크나이저 내부에서도 일종의 전처리가 가능하기 때문에 전처리 필터는 상대적으로 활용도가 많이 떨어진다. 그렇기 때문에 엘라스틱서치에서 공식적으로 많은 종류의 전처리 필터를 제공하지 않는다. 이 가운데 HTML 문서의 전처리를 위해 제공하는 전처리 필터를 알아보자. HTML strip char filter 문장에서 HTML을 제거하는 전처리 필터이며 필터 옵션은 아래와 같다. escaped_tags 특정 태그만 삭제한다. 기본 값으로 HTML 태그를 전부 삭제한다. Tokenizer Filter 전처리 필터를 거쳐 토..
텍스트 분석 개요 엘라스틱서치는 루씬을 기반으로 구축된 텍스트 기반 검색엔진이다. 루씬은 내부적으로 다양한 분석기를 제공하는데 엘라스틱서치는 루씬이 제공하는 분석기를 그대로 활용한다. 그렇기 때문에 이 분석기를 어떻게 동작하는지 이해하고 구성하는 것이 중요하다. "우리나라가 좋은나라, 대한민국 화이팅" 문장이 있다고 가정해보자. 이 문장을 검색하기 위해 "대한민국"이라고 입력한다면 "우리나라"라는 단어가 존재하지 않기 때문에 검색이 되지않는다. 엘라스틱서치는 문서를 색인하기 전에 해당 문서의 필드 타입이 무엇인지 확인하고 텍스트 타입이면 분석기를 통해 이를 분석한다. 텍스트가 분석되면 개별 텀으로 나뉘어 형태소 형태로 분석이 수행된다. 해당 형태소는 특정 원칙에 의해 필터링되어 단어가 삭제되거나 추가/수..
필드에는 다음과 같은 데이터 타입을 지정할 수 있다. - keyword, text 같은 문자열 데이터 타입 - date, long, double, integer, boolean, ip 같은 일반적인 데이터 타입 - 객체 또는 중첩문과 같은 JSON 계층의 특성의 데이터 타입 - geo_point, geo_shape 같은 특수한 데이터 타입 Keyword 타입 별도의 분석기를 거치지 않고 원문 그대로 색인되기 때문에 특정 코드나 키워드 등 정형화된 콘텐츠에 주로 사용된다. 엘라스틱서치의 일부 기능은 형태소 분석을 하지 않아야만 사용이 가능한데 이 경우에도 Keyword 타입이 사용된다. PUT movie_search_datatype/_mapping/_doc { "properties": { "multiMov..
메타 필드(Meta Fields)는 메타 데이터를 저장하는 특수 목적의 필드로서 검색시 문서를 다양한 형태로 제어하기 위해 사용되는 필드다. 아래 예제에서 보았을 때, 실제 문서 정보를 담고있는 항목은 _source항목이다. 그 밖에 _index, _type, _id, _score 항목은 엘라스틱 서치가 직접 생성한 메타 필드다. (언더바('_')로 시작하는 항목은 전부 다 메타필드라고 봐도 무방할 듯..?) { "_index": "movie_search", "_type": "_doc", "_id": "8", "_score": 1, "_source": { "movieCd": "20178401", "movieNm":"검객", "movieNmEn": "", "prdtYear": "2017", "openDt"..
엘라스틱서치에서 색인할 때 데이터 유형에 따라 필드에 적절한 데이터 타입을 지정하는 과정을 맵핑이라고한다. 맵핑은 색인될 문서의 데이터 모델링이라고도 할 수 있다. 만약 맵핑 설정을 하지 않으면 엘라스틱서치가 자동으로 필드를 생성하고 타입을 결정한다. 필드 데이터 타입이 자동으로 지정될 경우 실제 운영환경에서 unknown 이슈가 발생될 수도 있다. 맵핑 api 맵핑은 색인시 데이터가 어디에 어떻게 저장되는가를 결졍하는 설정이다. 문서에 존재하는 필드의 속성을 정의할 때 각 필드 속성에는 데이터 타입과 메타데이터가 포함된다. 이를 통해 색인 과정에서 문서가 어떻게 역색인으로 변환되는지를 상세하게 정의할 수 있다. 맵핑 정보를 설정할 때는 아래와 같은 사항들을 고려해야한다. 꼭 명시적인 맵핑 설정을 통해 ..
api의 종류 앞서 계속 언급되었듯이 Elasticsearch는 RESTful 방식의 api를 제공하며 json 기반으로 통신한다. 아래와 같이 엘라스틱서치에서 api를 제공한다. 인덱스 관리 api: 인덱스 관리 문서 관리 api: 문서 추가/수정/삭제 검색 api: 문서 조회 집계 api: 문서 통계 문서를 색인하기 위해서는 기본적으로 인덱스를 생성해야한다. 인덱스를 통해 입력되는 문서의 필드를 정의하고 각 필드에 알맞는 데이터 타입을 지정한다. 이 과정을 통해 효율적으로 색인이 가능하다. index vs indices 색인은 데이터가 토큰화되어 저장된 자료구조를 의미한다. 'index'를 번역하면 '색인'인데, elasticsearch에서 인덱스라는 영어를 색인과 다른 의미로 사용한다. index:..