0%

Elasticsearch-hello-Elasticsearch

엘라스틱서치 입문과 활용

1.엘라스틱 서치 개요

1-1.엘라스틱 서치란

우리는 지금 정보의 홍수 속에 살고 있다. 매일 매초 인터넷에 연결된 수없이 많은 시스템으로부터 헤아릴 수 없을 만큼 많은 데이터가 쏟아져 나오고 있으며, 이 데이터로부터 의미 있고 가치 있는 정보를 뽑아내기 위한 시스템 또한 수도 없이 개발되고 있다.

특히 SNS와 각종 포털 사이트에서 사용자의 활동 정보 등에 대한 대용량 데이터의 실시간 분석 기술은 빅데이터라는 이름의 트렌드로 자리 잡으며 수많은 업체와 정부 기관에 데이터 활용의 새 지평을 열었다.

이와 같은 정보의 홍수속에서 필요로 하는 정확한 데이터를 검색하여 찾는 기술은 무엇보다 중요해 졌다. 데이터를 검색하는데 있어 전 세계적으로 가장 널리 사용되고 있는 기술중 하나가 바로 아파치 루씬(Apache Lucene)이다.

자바로 개발된 루씬은 오픈소스로 현재 아파치 Top 레벨 프로젝트로 등록돼 있다.

루씬은 강력한 검색 기능이 있지만, 완전한 솔루션이 아닌 라이브러리로 제공되기 대문에 개인이나 기업에서 실제로 사용혀려면 루씬 라이브러리를 이용해 검색 솔루션을 스스로 개발해야 한다.

아파치 루씬 라이브러리를 실무에 사용하기 위해 티카(Tica), 솔라(Solr)등의 솔루션이 개발되어 있는데 가장 최근에 개발돼 선풍적인 인기를 끌고 있는 솔루션이 바로 엘라스틱 서치이다.

엘라스틱서치는 샤이 배논(Shay Bannon)이 개발했으며 현재 오픈소스 프로젝트로 진행되고 있다.

엘라스틱 서치를 이용하여 분산환경에서의 병렬 처리와 실시간 검색을 지원하고, 확장성이 뛰어난 대규모 시스템을 쉽게 구축할 수 있다.

엘라스틱 서치를 요약하자면, 빅데이터(비정형데이터)로부터 원하는 데이터를 검색하기 위한 검색엔진 솔루션이라고 할수 있다.

1-2. 용어 정리를 통한 엘라스틱서치의 이해

네이버나 구글에서 제공하는 다양한 서비스는 일상에서 빼놓을 수 없는 서비스로 자리매김했다.

그중에서도 사용자가 원하는 검색어에 대한 결과를 제공하는 검색 서비스가 가장 많이 사용되고 있다.

그리고 이러한 검색 서비스를 부르는 용어도 다양하다.

검색엔진, 검색시스템, 검색서비스 등의 용어가 대표적인데 무언가 비슷하면서도 다른 듯한 알쏭달쏭한 느낌이 든다.

먼저 검색엔진(Search engine)은 광활한 데이터에서 원하는 검색결과는 제공하는 프로그램이다.

검색엔진은 검색 결과로 제공되는 데이터의 특성에 따라 구현 형태가 각각 달라진다.

검색 역사에 한 획을 그은 야후(Yahoo)는 디렉터리 기반의 검색 결과를 세계 최초로 제공했다.

이를 바탕으로 요즘에는 뉴스, 블로그, 카페 등 대범주에 따른 카테고리별 검색결과를 대부분의 검색 업체에서 제공하고 있다.

검색 시스템(Search system)은 대용량 데이터를 기반으로 신뢰성 있는 검색 결과를 제공하기 위해 검색엔진을 기반으로 구축된 시스템을 통칭하는 용어다.

수집기를 이용해 방대한 데이터를 수집하고 이를 다수의 검색엔진을 이용해 색인하고 검색결과를 UI로 제공한다.

시스템 내부의 정책에 따라 관련도가 다수 높은 문서를 검색 결과의 상위에 배치할 수 있을뿐더러 특정 필드나 문서에 가중치를 둬서 검색의 정확도를 높일 수도 있다.

검색 서비스(search service)는 검색엔진을 기반으로 구축한 검색 시스템을 활용해 검색 결과를 서비스로 제공한다.

엄밀히 말하자면 엘라스틱서치는 검색엔진으로 분류 할 수 있다.

그리고 ELK스택을 활용하여 검색엔진보다 더 큰 검색시스템을 구성 할수 있다.

검색 서비스(ex:google, naver ) > 검색 시스템(ex: ELK스택) > 검색엔진(ex: 엘라스틱 서치)

1-3. 검색 시스템의 구성 요소

이번에는 검색시스템의 구성요소를 통해 엘라스틱서치를 알아보자.

검색 시스템의 기본 구조는 개발사에 따라 서로 조금씩 다르지만 기본 구조는 같다.

일반적으로 정보를 수집하는 수집기, 수집한 데이터를 저장하는 스토리지, 수집한 데이터를 검색에 적절한 형태로 변환하는 색인기, 색인된 데이터에서 일치하는 문서를 찾는 검색기로 구성된다.

수집기

수집기는 웹사이트, 블로그, 카페 등 웹에서 필요한 정보를 수집하는 프로그램이다.

크롤러(Crawler), 스파이더(Spider), 웜(Worms), 웹 로봇(Web Robot) 등으로도 불린다.

파일, 데이터베이스, 웹페이지 등 웹상의 대부분의 정보가 수집대상이다.

파일의 경우 수집기가 파일명, 파일 내용, 파일 경로 등의 정보를 수집하고 저장하면 검색엔진이 저장된 정보를 검색하고, 사용자 질의에 답한다.

스토리지

데이터베이스에서 데이터를 저장하는 물리적인 저장소다. 검색엔진은 색인한 데이터를 스토리지에 보관한다.

색인기

검색엔진이 수집한 정보에서 사용자 질의와 일치하는 정보를 찾으려면 수집된 데이터를 검색 가능한 구조로 가공하고 저장해야 한다.

그 역할을 하는 것이 색인기다.

색인기는 다양한 형태로 분석을 조합해 정보에서 의미가 있는 용어를 추출하고 검색에 유리한 역색인 구조로 데이터를 저장한다.

검색기

검색기는 사용자 질의를 입력받아 색인기에서 저장한 역색인 구조에서 일치하는 문서를 찾아 결과로 반환한다.

질의와 문서가 일치하는지 유사도 기반의 검색 순위 알고리즘으로 판단한다.

검색기 또한 색인기와 마찬가지로 현태로 분석기를 이용해 사용자 질의에서 유의미한 용어를 추출해 검색한다.

따라서 사용하는 형태로 분석기에 따라 검색 품질이 달라진다.

Hello%20ElasticSearch/1.png

엘라스틱서치는 위 검색시스템 구성요소 중 색인기, 스토리지, 검색기를 포함하고 있다.

1-4. 관계형 데이터베이스와 엘라스틱서치의 차이점

검색엔진을 설명할 때 항상 비교되는 것이 관계형 데이터베이스(RDMBS)다.

두 가지 모두 질의와 일치하는 데이터를 찾아 사용자에게 제공한다는 점에서 유사점이 많이 때문이다.

하지만 관계형 데이터베이스로 검색 기능을 제공하는 데는 많은 문제점이 있다.

관계형 데이터베이스의 어떠한 한계 때문에 검색엔진이 등장하게 됐는지, 그리고 이 둘은 어떤 점에서 차이점이 있는지 살펴보자.

데이터베이스는 데이터를 통합 관리하는 데이터의 집합이다. 저장방식에 따라 크게 관계형 또는 계층형 데이터베이스로 나뉜다.

모든 데이터는 중복을 제거하고 정형 데이터로 구조화해 행과 열로 구성된 테이블에 저장된다.

SQL문을 이용해 원하는 정보의 검색이 가능한데 텍스트 매칭을 통한 단순한 검색만 가능하다.

텍스트를 여러 단어로 변형하거나 여러 개의 동의어나 유의어를 활용한 검색은 불가능하다.

반면 검색엔진은 데이터베이스에서 불가능한 비정형 데이터를 색인하고 검색할 수 있다.

형태소 분석을 통해 사람이 구사하는 자연어의 처리가 가능해지고 역색인 구조를 바탕으로 빠른 검색 속도를 보장한다.

엘라스틱서치와 관계평 데이터베이스 비교

엘라스틱서치 관계형 데이터베이스
인덱스(Index) 데이터베이스(Database)
샤드(Shard 파티션(Partition)
타입(Type) 테이블(Table)
문서(Document) 행(Row)
필드(Field) 열(Column)
매핑(Mapping) 스키마(Schema)
Query DSL SQL

위 표는 검색엔진의 대표 자자격인 엘라스틱서치와 관계형 데이터베이스의 주요 개념을 비교해 보여준다.

엘라스틱서치의 인덱스는 관계형 데이터베이스의 데이터베이스와 비슷한 문서의 모음을 뜻한다.

엘라스틱서치의 타입은 데이터베이스의 테이블과 같은 역을 한다.

6.0 이하 버전에서는 하나의 인덱스 내부에 기능에 따라 데이터를 분류하고 여러 개의 타입을 만들어 사용했지만 현재(7버전)는 하나의 인덱스에 하나의 타입만을 구성하도록 바뀌었다.

엘라스틱서치는 하나의 행을 문서라고 부르며, 해당 문서는 데이터베이스 테이블의 한 행을 의미한다.

또한 엘라스틱서치의 매핑은 필드의 구조와 제약조건에 대한 명세를 말하며 이에 대응하는 관계형 데이터베이스의 개념을 스키마라 한다.

관계형 데이터베이스와 엘라스틱서치는 인덱스라는 개념을 다르게 사용한다.

엘라스틱서치의 인덱스는 Database, 앞에 설명했지만 관계형 데이터베이스에서의 인데스는 WHERE 절의 쿼리와 JOIN을 빠르게 만드는 보조 데이터 도구로 사용된다.

엘라스틱서치와 데이터베이스는 데이터의 추가, 수정, 삭제 방식에도 차이가 있다.

엘라스틱서치는 기본적으로 HTTP를 통해 JSON 형식의 RESTful API를 이용한다.

엘라스틱서치는 자바로 개발 됐지만 여러 가지 프로그래밍 언어를 통해 사용할 수도 있다.

Copy of 추가, 검색, 삭제, 수정 기능 비교

엘라스틱서치에서 사용하는 HTTP 메소드 기능 데이터베이스 질의 문법
GET 데이터조회 SELECT
PUT 데이터생성 INSERT
POST 인덱스 업데이트, 데이터조회 UPDATE, SELECT
DELETE 데이터삭제 DELETE
HEAD 인덱스정보확인 -

1-5. 엘라스틱서치의 특징

요즘에는 대량의 데이터를 빠르게 검색하기 위해 NoSQL(No Structured Query Language)를 많이 사용한다.

엘라스틱서치 NoSQL의 일종으로서 분류가 가능하고 부산 처리를 통해 실시간에 준하는 빠른 검색이 가능하다.

기존 데이터베이스로는 처리하기 어려운 대량의 비정형 데이터도 검색할 수 있으며, 전문검색(Full Text)과 구조 검색 모두를 지원한다.

기본적으로는 검색엔진이지만 MongoDB나 Hbase처럼 대용량 스토리지로도 활용할 수 있다.

1-5-1. 엘라스틱서치의 강점

오픈소스 검색엔진

엘라스틱서치는 아파치 재단의 루씬(Lucene)을 기반으로 개발된 오픈소스 검색엔진이다.

따라서 전 세계에서 수많은 사람들이 사용하고 있으며, 버그가 발생할 경우에도 대부분 빠르게 해결된다.

현재 약 2억 5천만 번 이상 다운로드됐는데, 이 수치만 보더라도 얼마나 많은 사람들이 사용하고 있는지 알 수 있다.

다운로드가 많이 일어난다는 것은 프로젝트가 많이 활성화돼 있다는 것을 의미한다.

전문검색

PostgreSQL, MongoDB 같은 대부분의 데이터베이스는 기본 쿼리 및 색인 구조의 한계로 인해 기본적인 텍스트 검색 기능만 제공한다.

하지만 엘라스틱서치는 좀 더 고차원적인 전문검색(Full Text)이 가능하다.

전문검색이란 내용 전체를 색인해서 특정 단어가 포함된 문서를 검색하는 것을 말한다.

기존 관계형 데이터베이스는 전문 검색에 적합하지 않지만 엘라스틱서치는 다양한 기능별, 언어별 플러그인을 조합해 빠르게 검색할 수 있다.

통계분석

비정형 로그 데이터를 수집하고 한곳에 모아 통계 분석을 할 수 있다.

엘라스틱서치와 키바나(Kibana)를 연결하면 실시간으로 쌓이는 로그를 시각화하고 분석할 수 있다.

스키마리스(Schemaless)

데이터베이스는 스키마라는 구조에 따라 데이터를 적합한 형태로 변경해서 저장하고 관리한다.

반면 엘라스틱서치는 정형화되지 않은 다양한 형태의 문서도 자동으로 색인하고 검색할 수 있다.

RESTful API

엘라스틱서치는 HTTP 기반의 RESTful API를 지원하고 요청뿐 아니라 응답에도 JSON 형식을 사용해 개발 언어, 운영체제, 시스템에 관계없이 이기종 플랫폼에서도 이용 가능하다.

멀티테넌시(Multi-tenancy)

서로 상이한 인덱스일지라도 검색할 필드명만 같으면 여러 개의 인덱스를 한번에 조회할 수 있다.

이를 이용해 멀티테넌시 기능을 제공할 수 있다.

Document-Oriented

여러 계층의 데이터를 JSON 형식의 구조화된 문서로 인덱스에 저장할 수 있다.

계층 구조로 문서도 한번의 쿼리로 쉽게 조회할 수 있다.

역색인(Inverted Index)

앞서 언급했듯이 엘라스틱서치는 루씬 기반의 검색엔진이다. 따라서 엘라스틱서치 또한 역색인을 지원한다.

반면 MongoDB, 카산드라(Cassandra)같은 일반적인 NoSQL은 역색인을 지원하지 않는다.

이는 다른 NoSQL 대비 엘라스틱서치의 매우 큰 장점이라 할 수 있다.

Hello%20ElasticSearch/KakaoTalk_20191204_215703353.png

색인:책의 목차와 같다.

Hello%20ElasticSearch/KakaoTalk_20191204_215708663.png

역색인:책의 뒷부분에 중요한 키워드로 페이지를 찾을수 있다.

확장성과 가용성

10억 개의 문서를 색인한다고 가정해보자. 모든 문서를 색인하는 데 막대한 비용과 시간이 드는 것은 불보듯 뻔하나.

하지만 엘라스틱서치를 분산 구성해서 확장한다면 대량의 문서를 좀 더 효율적으로 처리할 수 있다.

분산 환경에서 데이터는 샤드(Shard)라는 작은 단위로 나뉘어 제공되며, 인덱스를 만들 때마다 샤드의 수를 조절할 수 있다.

이를 통해 데이터의 종류와 성격에 따라 데이터를 분선해서 빠르게 처리할 수 있다.

1-5-2. 엘라스틱서치의 약점

마법주문처럼 보이는 엘라스틱서치도 약점이 있다.

첫째, 실시간이 아니다. 일반적으로 색인된 데이터는 통상적으로 1초 뒤에나 검색이 가능해진다.

색인된 데이터는 내부적으로 커밋(Commit)과 플러쉬(Flush)같은 복잡한 과정을 거치기 때문에 실시간이 아니다.

엄밀히 따지자면 준 실시간(Near Realtime)이라고 할 수 있다.

둘째, 트랜잭션과 롤백 기능을 제공하지 않는다. 엘라스틱서치는 기본적으로 분산 시스템으로 구성된다. 전체적인 클러스터의 성능 향상을 위해 시스템적 비용 소모가 큰 롤백(Rollback)과 트랜젝션(Transaction)을 지원하지 않기 때문에 최악의 경우 데이터 손실의 위험이 있다.

셋째, 데이터의 업데이트를 제공하지 않는다. 엄밀히 말하자면 엘라스틱서치는 업데이트 명령이 요청될 경우 기존 문서를 삭제하고 변경된 내용으로 새로운 문서를 생성하는 방식을 사용한다.

이러한 이유로 단순 업데이트에 비해서는 상대적으로 많은 비용이 발생한다.

하지만 이것은 큰 단점은 아니다. 이를 통해 불변적(Immutable)이라는 이점을 취할 수 있기 때문이다.

1-6.엘라스틱서치 사용사례

  • 위키피디아(Wikipedia)는 엘라스틱서치를 이용해 전문검색(Full Text Search)를 수행하고 실시간 타이핑 검색, 추천검색어 기능등에 활용 중이다.
  • 더 가디언(The Guardian)지는 방문객의 로그 분석을 통한 소셜 데이터를 생성해 실시간 응대와 기사에 대한 반응 분석등에 엘라스틱서치를 사용하고 있다.
  • 스택오버플로어(StackOverflow)에서는 검색 내용과 결과를 통합해 유사한 질문과 해답을 연결하는 데 엘라스틱서치를 활용하고 있다.
  • 깃허브(Github)에서는 1,300억 줄이 넘는 소스코드를 검색하는 데 엘라스틱서치를 사용중이다.
  • 골드만 삭스(Goldman Sachs)에서는 매일 5TB가 넘는 데이터를 저장하고 있으며, 엘라스틱서치를 이용해 이 데이터를 주식 시장의 변동을 분석하는데 사용한다.

2.엘라스틱서치 검색원리(분석과 역색인)

엘라스틱서치에서 입력된 데이터를 통해 검색어를 추출하기 위한 프로세스를 거치는데 이 과정을 분석(Analysis)이라고 한다.

이때 분석 과정에서 사용하는 프로그램을 분석기-애널라이저(Analyzer)라고 하며 분석기는 하나의 토크나이저(Tokenizer)와 0개 또는 1개 이상의 토큰필터(Token Filter)로 구성돼 있다.

토크나이저는 입력 데이터를 토크나이저에 설정된 기준에 따라 검색어 토큰으로 분리하는 작업을 한다.

토큰 필터는 토크나이저로 분리된 토큰들에 다시 필터를 적용해서 실제로 검색에 쓰이는 검색어들로 최종 변환하는 작업을 한다.

엘라스틱 서치에서는 내부적으로 다양한 분석기를 가지고 있으며, 자신만의 분석기를 생성해서 적용할 수도 있다.

2-1. 분석과정

엘라스틱서치에서 데이터를 색인할 때 문사가 분석되는 가정을 한번 살펴보자.

데이터는 색인될 때 인덱스에 설정된 분석기의 종류에 따라 토크나이저 → 토큰필터 순으로 분석과정을 거친다.

예제로 문자열 “Around the World in Eighty Days”에 whitespace 토크나이저와 lowercase그리고 stop 토큰필터를 적용시켜 가면서 분석 과정을 차례대로 확인해보자.

먼저 이 문자열에 whitespace 토크나이저를 적용시켜서 분석을 진행하면 문자열이 다음과 같이 분리된다.

Hello%20ElasticSearch/1-Page-2_(1).png

whitespace 토크나이저는 공백 또는 줄바꿈을 기준으로 단어를 불리하는 토크나이저다.

위에서 처럼 withespace토크나이저를 거친 문자열 “Around the Wrold in Eighty Days”는 각 Around, the, World, in, Eighty, Days라는 검색어 토큰으로 색인된다.

이제 이 검색어 토큰에 lowercase 토큰필터를 적용하면 각 검색어 토큰은 다음과 같이 변경된다.

Hello%20ElasticSearch/1-Page-3.png

lowercase 토큰필터를 거친 검색어 토큰은 모두 소문자로변환된다. lowercase 토큰필터를 거친 검색어 토큰에 마지막으로 stop 토큰필터를 한번 더 적용하면 검색어 토큰은 다음과 같이 된다.

Hello%20ElasticSearch/1-Page-4_(1).png

stop 토큰필터는 검색어 토큰 중 불용어(stopwords)에 해당하는 토큰을 검색어 토큰 목록에서 제외시키는 역할을 한다.

일반적으로 영어 단어 중 the, end, is와 같이 거의 대부분의 문장에 빠지지 않고 들어있는 대명사 또는 전치사 등의 단어를 실제로 검색어로 사용하기에는 문제가 있기 때문에 이러한 단어는 불용어에 해당된다.

위 내용을 실제 엘라스틱서치에 _analyze API를 통해 확인해 볼 수 있다.

아래는 whitespace 토크나이저만 적용하여 “Around the Wrold in Eighty Days” 텍스트의 분석을 요청하는 화면이다.

Hello%20ElasticSearch/Untitled.png

Hello%20ElasticSearch/Untitled%201.png

위처럼 공백 단위로 잘려진 토큰을 확인 할 수 있다.

filter로 lowercase를 적용한 결과 아래처럼 분석된 토큰들이 소문자로 변환된 것을 확인 할 수 있다.

Hello%20ElasticSearch/Untitled%202.png

Hello%20ElasticSearch/Untitled%203.png

이제 여기서 추가로 stop 토큰필터를 적용해보자.

Hello%20ElasticSearch/Untitled%204.png

Hello%20ElasticSearch/Untitled%205.png

the, in 이 삭제된 것을 확인할 수 있다.

분석기(Analyzer)는 데이터의 분석에 사용할 토크나이저와 토큰 필터를 저장하고 있는 일종의 배치 프로그램으로 이해할 수 있다.

엘라스틱서치에서 기본적으로 제공하는 분석기 역시 모두 토크나이저와 토큰필터를 가지고 있으며, 이 외에 추가로 사용자가 임의의 토크나이저와 토큰필터를 선택해서 사용자 정의 분석기를 생성할 수 있다.

사용자 정의 분석기는 인덱스 단위로저장되며 해당 인덱스에 데이터 색인할 때 분석기를 명시해서 사용할 수 있다.

다음은 실제 인덱스를 생성하면서 분석기를 설정하는 화면이다.

Hello%20ElasticSearch/Untitled%206.png

inca_index라는 인덱스를 생성하며 settings에 분석기를 설정했다.

아래는 맵핑정보로서 RDB의 테이블 정의라고 생각하면 된다. title이라는 프로퍼티에 위에서 생성한 my_analyzer를 설정했다.

인덱스를 생성한뒤 해당 인덱스에 아래처럼 데이터를 입력하게 되면, title이라는 프로퍼티는 자동으로 index생성시 설정한 my_analyzer를 통해 역색인 과정을 거쳐 해당 역색인 데이터를 엘라스틱서치 내부에 따로 저장하게 된다.

Hello%20ElasticSearch/Untitled%207.png

Hello%20ElasticSearch/1-Page-5.png

3.엘라스틱 서치의 활용예시

3-1. ELK 스택

엘라스틱서치는 뛰어난 검색엔진이지만 실무에서 사용하려면 입력할 데이터를 JSON형태로 가공 해야 하고, 검색된 데이터를 시각화하려면 별도의 차트 프로그램이나 라이브러리를 사용해야 하는등 부가적인 작업을 거쳐야 한다.

이를 위해 엘라스틱서치에서는 데이터 입력을 다양한 방식으로 간편하게 할 수 있는 프로그램인 로그스태시(Logstash)와 검색 데이터를 편리하게 시각화할 수 있는 도구인 키바나(Kibana)를 홈페이지에서 함께 제공하고 있다.

엘라스틱서치(Elasticsearch), 로그스테이시(Logstash), 키바나(Kibana)를 연동해서 구성한 시스템을 ELK 스택(ELK Stack)이라 한다.

Hello%20ElasticSearch/Untitled%208.png

ELK 스택와 더불어 ELK 스택에 경량 데이터수집 플랫폼인 Beats를 통해 다양한 환경에서 다양한 데이터를 수집, 가공, 저장, 시각화 하는 구조를 구성할 수 있다.

Hello%20ElasticSearch/beats-platform.png

3-2. 한글 형태소 분석기

엘라스틱서치에서는 여러종류의 분석기와 토크나이저, 토큰필터를 내장하고 있다.

하지만 영어가 아닌 우리말(한글)로 된 문장을 분석하려면 내장된 분석기로 만족할 만한 결과를 얻기가 쉽지 않다.

예를 들어 “동해물과 백두산이 마르고 닳도록”과 같은 문장을 분석하면 보통은 “동해물과”, “백두산이”와 같이 공백 정도로만 토큰을 구분하거나 CJK 알고리즘을 사용한 경우에도 “동해”, “해물”과 같이 2음절의 토큰을 생성하는 정도로만 분석된다.

이 문장에서 “동해”, “백두산” 같은 검색어 토큰을 분석하려면 한글을 의미로 해석해서 분리할 수 있는 별도의 한글 형태소 분석기가 필요하다.

엘라스틱서치나 아파치 루씬에서는 한글을 위한 별도의 분석기 또는 사전을 제공하지 않고 있다.

하지만 정확한 한글 분석을 위해 국내 개발자들에 의해 별도로 개발되어 있는 한글 형태소 분석기들이 있다.

잘 알려진 분석기로는 아리랑 한글 분석기 프로젝트, 은전한잎 한글 분석기 프로젝트 등이 있으며 대부분 오픈소스로 개발되고 있으므로 해당 프로젝트 페이지에서 소스코드와 다양한 정보를 구할 수 있다.

Hello%20ElasticSearch/Untitled%209.png

참고자료

시작하세요! 엘라스틱서치(책)

엘라스틱서치 실무 가이드(책)