Elasticsearch는 또한 내부적으로 왜 안정적이며, 어떤 알고리즘, 자료구조 등등이기 때문에 빠른것이 보장되는지에 대한 이해도 추가 필요
Elasticsearch가 내부적으로 안정적이며 빠른 이유는 여러 가지가 있습니다.
1.
먼저, Elasticsearch는 Apache Lucene을 기반으로 만들어졌습니다. Lucene은 검색 엔진에 사용되는 강력한 오픈 소스 라이브러리로, 텍스트 인덱싱과 검색에 특화돼 있습니다.
2.
Elasticsearch는 대량의 데이터를 효율적으로 처리하기 위해 여러 가지 알고리즘과 자료구조를 사용합니다. 그 중 하나는 역색인화라는 개념입니다. 역색인화는는 단어가 어느 문서에 나타나는지를 기록해 두어 검색 속도를 향상시키는 데 도움이 됩니다.
3.
Elasticsearch는 분산 시스템으로 설계돼 있어서 여러 노드에 데이터를 분산 저장하고 병렬 처리를 가능하게 합니다. 이렇게 함으로써 데이터 검색 및 분석 작업을 효율적으로 처리할 수 있습니다.
4.
Elasticsearch는 실시간 검색을 지원하고 있어서 데이터가 업데이트되더라도 거의 실시간으로 검색 결과를 반영할 수 있습니다. 이는 대규모의 데이터셋에서도 높은 성능을 제공하는 데 기여하고 있습니다.
엘라스틱 서치의 검색이 빠른 이유?
Elasticsearch는 Lucene 인덱스 를 기반으로 한 검색 엔진입니다.
Lucene은 Apache 소프트웨어 재단에서 개발한 텍스트 검색 라이브러리로, 역색인화를 포함한 다양한 검색 기능을 제공합니다.
엘라스틱 서치는 Lucene을 기반으로 만들어졌기 때문에 Lucene의 강력한 역색인화 기능을 활용하여 대용량의 데이터를 효율적으로 검색할 수 있습니다.
결국, 엘라스틱 서치는 사용자에게 더 편리하고 확장 가능한 인터페이스를 제공하면서 Lucene의 강력한 검색 엔진을 내부적으로 활용하고 있어.
Lucene 의 특징?
Lucene은 텍스트를 단어 또는 토큰 단위로 분석하여 색인화합니다.
Elasticsearch에 데이터가 저장되는 과정은 인덱싱(Indexing) 과정이라고 불립니다. 이 과정에서는 입력된 텍스트 데이터가 다양한 전처리 단계를 거쳐 색인화(Indexing)됩니다. 주로 사용되는 전처리 단계에는 다음과 같은 것들이 있습니다:
1.
토큰화 (Tokenization):
•
입력된 텍스트를 단어 또는 토큰으로 분리하는 과정입니다.
2.
소문자 변환 (Lowercasing):
•
토큰을 소문자로 변환하는 과정입니다.
3.
불용어 제거 (Stopwords Removal):
•
일반적인 불용어(Stopwords)를 제거하는 과정입니다.
4.
어간 추출 (Stemming):
•
단어의 어간을 추출하여 형태소를 통일화하는 과정입니다.
이러한 전처리 과정을 통해 데이터가 적절히 색인화되고 저장되어, 검색 시에 사용자가 입력한 쿼리와 일치하는 문서를 빠르게 찾을 수 있게 됩니다.
구분자→ /This/is/an/apple - (bookid 2)
ngram 2 → th/hi/is/is/an/ap/pp/pl/le →각각(bookid 1) (origin) this is an apple
역색인화의 예시는 무엇인가요?
각 단어를 포함하는 문서의 목록을 만들어 두는 것입니다.
따라서 검색할 때 해당 단어를 가진 문서들을 빠르게 찾을 수 있게 도와줄 수 있습니다.
역색인화는 검색 엔진이나 데이터베이스에서 효율적인 텍스트 검색을 가능케 하는 핵심 기술 중 하나로 쓰이고 있어.
예를 들어, 세 개의 문서가 있다고 가정한다면
1.
책1: "개는 우정과 충성의 상징이다."
2.
책2: "반려동물 중에서도 개는 가장 사랑 받는다."
3.
책3: "강아지와 함께 하는 행복한 일상."
이제 "개"라는 키워드에 대한 대한 역색인은 다음과 같이 구성됩니다.
•
개: 책1, 책2, 책3
어간 추출은 어떻게 되는지
어간 추출은 다양한 알고리즘을 사용할 수 있어. 그 중에서도 포터 알고리즘(Porter Algorithm)과 랭케스터 스태머(Lancaster Stemmer) 알고리즘이 널리 사용돼.
1.
포터 알고리즘(Porter Algorithm): 이 알고리즘은 가장 널리 사용되는 어간 추출 알고리즘 중 하나로, 영어의 어간을 추출하는 데 특화돼 있어. 규칙 기반의 접근을 사용하며, 단어의 뒷 부분에서 접사를 제거하고 어간을 추출합니다.
2.
랭케스터 스태머(Lancaster Stemmer): 이 알고리즘은 포터 알고리즘과 유사하지만 더 적극적으로 접사를 제거하여 더 짧은 어간을 생성합니다. 따라서 더 즉각적인 어간 추출이 이루어집니다.
이러한 알고리즘들은 언어의 특성과 문맥에 따라 다르게 적용될 수 있어서, 사용자는 프로젝트나 분석 목적에 맞게 적절한 어간 추출 알고리즘을 선택하게 돼.
한글의 알고리즘은?
한글의 어간 추출에는 여러 알고리즘이 적용될 수 있지만, 대표적으로는 꼬꼬마(Kkma) 형태소 분석기나 한나눔(Hannanum) 형태소 분석기 등이 사용돼. 이러한 형태소 분석기들은 주로 문장을 형태소 단위로 나누고, 각 형태소의 품사를 태깅하는 작업을 수행하는데, 이를 통해 어간을 추출하거나 형태소 분석을 지원하게 됩니다.