-
ElasticSearch - 루씬(Lucene)ElasticSearch 2024. 8. 31. 22:34반응형
엘라스틱서치(Elasticsearch)에서 루씬(Lucene)은 핵심적인 역할을 하는 검색 엔진 라이브러리입니다. 루씬은 아파치 소프트웨어 재단에서 개발한 오픈 소스 프로젝트로, 텍스트 검색과 색인을 위한 강력한 도구를 제공합니다.
루씬(Lucene)의 역할:
- 색인(Indexing):
- 문서를 분석하고 색인을 생성합니다. 색인은 문서의 내용을 구조화된 형태로 저장하여, 이후 검색 시에 빠르게 검색 결과를 찾을 수 있도록 돕습니다.
- 루씬은 텍스트를 분석하여 각 단어의 빈도, 위치, 형태 등을 분석하고, 이를 바탕으로 검색할 수 있는 색인 데이터를 만듭니다.
- 검색(Querying):
- 루씬은 색인된 데이터를 바탕으로 검색 쿼리를 실행합니다. 사용자가 입력한 쿼리와 가장 관련성 높은 문서를 찾아내어 결과로 반환합니다.
- 검색 시에 다양한 쿼리 타입(예: Term, Phrase, Fuzzy, Boolean)을 사용할 수 있으며, 이를 통해 매우 유연하고 강력한 검색 기능을 구현할 수 있습니다.
- 토큰화 및 분석:
- 텍스트를 처리하기 위해 루씬은 토크나이저(tokenizer)와 분석기(analyzer)를 사용합니다. 이 과정에서 텍스트는 개별 단어(토큰)로 분리되고, 불필요한 단어 제거, 어근화(스테밍) 등의 작업이 이루어집니다.
엘라스틱서치와 루씬의 관계:
엘라스틱서치는 루씬을 기반으로 구축된 분산형 검색 및 분석 엔진입니다. 엘라스틱서치는 루씬의 강력한 텍스트 검색 기능을 활용하여 대규모 데이터에서 빠르고 효율적인 검색을 제공할 수 있습니다. 그러나 루씬은 단독으로 사용하기 어렵고, 사용자 친화적이지 않은 반면, 엘라스틱서치는 루씬의 기능을 감싸는 API와 인터페이스를 제공하여 개발자가 더 쉽게 사용할 수 있도록 합니다.
따라서 루씬은 엘라스틱서치의 심장부에 있는 핵심 기술이며, 엘라스틱서치의 검색과 색인 기능의 기본 엔진이라고 할 수 있습니다.
검색 시스템의 구성 요소:
1. 수집기
- 웹사이트, 블로그, 카페 등 웹에서 필요한 정보를 수집하는 프로그램
2. 스토리지
- 데이터베이스에서 데이터를 저장하는 물리적인 저장소 -> 색인한 데이터를 스토리지에 보관한다.
3. 색인기
- 검색엔진이 수집한 정보에서 사용자 질의와 일치하는 정보를 찾으려면 수집된 데이터를 검색 가능한 구조로 가공하고 저장해야 하는데, 해당 역할을 하는것이 수집기이다.
4. 검색기
- 사용자 질의를 입력받아 색인기에서 저장한 역색인 구조에서 일치하는 문서를 찾아 결과로 반환한다
기본적으로 HTTP를 통해 JSON형식의 RESTful API를 이용한다.
HTTP 메서드 기능 데이터베이스 질의 문법 GET 데이터 조회 SELECT PUT 데이터 생성 INSERT POST 인덱스 업데이트, 데이터 조회 UPDATE, SELECT DELETE 데이터 삭제 DELETE HEAD 인덱스의 정보 확인 - curl -X(메서드) http:host:port/(인덱스)/(타입)/(문서)/(문서 id) d '{json 데이터}'
curl에서 제공하는 -x옵션을 사용하여 HTTP메서드 설정이 가능하다.
ID Name Location Gender Date 1 가마돈 서울 남 2018-05-12 2 로이드 도쿄 여 2018-05-11 SELECT * FROM USER WHERE Name like '%가마돈%'
ID Name Location Gender Date 1 가마돈 서울 남 2018-05-12 엘라스틱 서치에서 Search를 하는경우 query를 통해 특정 컬럼을 지정하여 검색할 수 있다.
GET http://localhost:9200/user/_search?q=Name:가마돈
{ "ID": 1, "Name": "가마돈", "Location": "서울", "Gender": "남", "Date": "2018-05-12" }
처음의 sql쿼리는 가마돈이 포함 된 내용을 가지고 오지만 엘라스틱 서치의 명령문은 정확하게 Name을 지정하여 가지고오는 명령어이다. 여기서 q는 query의 줄임말로 사용이 된다.
user의 경우 index즉 데이터베이스를 칭하고 _search의 경우 엘라스틱서치의 명령어이다.
장점
- 빠른 검색 속도:
- 엘라스틱서치는 루씬(Lucene)을 기반으로 하여 매우 빠른 검색 성능을 제공합니다. 특히 대규모 데이터 세트에서도 신속하게 검색 결과를 반환할 수 있습니다.
- 수평적 확장성:
- 엘라스틱서치는 클러스터링을 통해 여러 노드에 걸쳐 데이터를 분산할 수 있어, 데이터 증가에 따라 쉽게 확장 가능합니다. 이를 통해 시스템의 가용성을 높이고, 성능을 유지할 수 있습니다.
- 유연한 스키마:
- 엘라스틱서치는 스키마리스(schema-less) 접근 방식을 허용하여, 다양한 유형의 데이터를 처리할 수 있습니다. 데이터 모델링이 매우 유연하며, 스키마 정의를 사전에 강제하지 않습니다.
- 강력한 실시간 분석 기능:
- 엘라스틱서치는 데이터 분석을 실시간으로 수행할 수 있는 기능을 제공합니다. Kibana와 같은 시각화 도구와 연계하면, 데이터의 실시간 대시보드를 쉽게 구축할 수 있습니다.
- 풍부한 생태계:
- 엘라스틱서치는 다양한 도구와 플러그인을 제공하여 사용자가 시스템을 쉽게 확장하고 관리할 수 있습니다. 예를 들어, Beats, Logstash, Kibana와 통합하여 데이터 수집, 처리, 시각화를 원활하게 수행할 수 있습니다.
약점
- 준 실시간:
- 실시간이 아니다. 일반적으로 색인된 데이터는 통상적으로 1초 뒤에나 검색이 가능해진다. 색인된 데이터는 내부적으로 커밋과 플러시같은 복잡한 과정을 거치기 때문에 실시간이 아니다. 엄밀히 따지자면 준 실시간이라고 할 수 있다.
- 트랜잭션과 롤백 기능을 제공하지 않는다.
반응형'ElasticSearch' 카테고리의 다른 글
ElasticSearch - 매핑(mapping) (0) 2024.09.22 ElasticSearch - 인덱스와 샤드 (0) 2024.09.22 Docker로 Kibana ElasticSearch 설치 후 연동 (0) 2024.09.19 Docker를 활용하여 Kibana 설치하기 (0) 2024.09.19 Docker를 활용하여 ElasticSearch 설치 (0) 2024.09.19 - 색인(Indexing):