Dev Tools/ELK Stack

[Elasticsearch] Elastic Search 란? 간단한 개념 잡기.

Bans 2022. 8. 25. 22:01

 

Elasticsearch란? 

 

https://www.elastic.co/kr/what-is/elasticsearch

 

엘라스틱 서치의 공식 페이지 설명을 통해 간략하게 다시 정리해보자면

  • '정형 및 비정형 데이터' (텍스트, 숫자, 위치 기반 정보 등... 사실상 모든 데이터) 를 위한
    오픈소스 검색 & 분석 엔진이다.
  • Apache Lucene을 기반으로 구축되었다.
  • 2010년에 출시하였으며, ELK Stack의 핵심 구성 요소이다.
  • ELK 에는 데이터를 Elasticsearch 로 전송하기 위한 데이터 수집 에이전트 - Beats 가 포함되어있다.

위의 내용으로 정리해볼 수 있을 것이다.

 

ELK Stack (+ Beats)

 

실제로 간단하게 체험해 본 엘라스틱설치의 동작은

간략하게 아래와 같았다.

( Local 환경의 한계로, Kibana 는 사용해보지 못하고,

Logstash 와 Elasticsearch 만 사용해볼 수 있었다.)

 

  1. DB (local 테스트 환경의 경우 - mysql) 에 데이터 저장
  2. Logstash 를 통해 (input -> filter -> output) 저장된 데이터를
    일정 주기와 기준을 설정하여 필터링 후 Elasticsearch 서버로 전달
  3. 전달받은 데이터를, 설정한 기준값으로 (Analzyer) 변환하여 저장.
    생성된 index 를 기준으로 데이터 search 가 가능하다!

 

logstash.conf 예시

 

 

Elasticsearch index templete setting 예시

 

내 연습 프로젝트의 product 는 '밀키트' 였다.

그래서 상품명이

 

'백선생의 새로운마을 식당에서 판매하는 7분 김치찌개'

 

와 같은 느낌이었는데,

위의 'nGram tokenizer' 를 통해 index 를 설정해놓으니,

 

'백선생의 새로운마을 식당에서 판매하는 7분 김치찌개'

 

의 데이터를 찾을 수 있는 조건값이

 

'백', '백선', '백선생', '백선생의', '백선생의 ', '백선생의 새',

'선', '선생', '선생의 ', '선생의 새', '선생의 새로' ...

...

...

의 느낌으로 하나하나 토큰화되어 저장되는 모습을 확인 할 수 있었고

 

'선생' 만 search word 로 전달해도

원하는 결과값을 찾을 수 있었다.

 

nestjs 에서 사용해본 elasticsearch

 

처음엔, query 안의 검색 조건을 match 를 사용하여 검색했었다.

근데, match 를 이용해보니, match 를 이용하면

입력받은 '검색어' 또한 '토큰화' 하여 다시 검색을 하더라.

 

예를들어 검색어를

'파이어볼트' 로 검색했더니

 

'파스타...' 의 결과값과

'...밀키트' 의 검색결과값을 모두 가져오더라..

 

'파' '이' '어' '볼' '트' 로 나누어 검색하니

'파' 와 '트' 에 각 제품 이름이 검색조건에 걸려서 검색되던 모습을 볼 수 있었다.

 

위와같은 버그는

match 를 term 으로 바꾸어 사용함으로써

잡아볼 수 있었다.

 

참고 : 엘라스틱서치 검색 쿼리 관련

 

엘라스틱서치(elasticSearch) 검색 - 2부

해당 글은 엘라스틱 스택 개발부터 운영까지라는 책 중 4장을 정리하여 쓴 글입니다. 1부에 이어서 2부에서는 전문 쿼리, 매치 쿼리, 용어 쿼리, 멀티 매치 쿼리, 범위 쿼리, 논리 쿼리, 패턴 쿼리

flambeeyoga.tistory.com

 

 


 

간략하게 사용해봤지만

제공해주는 기능들을 살펴보면

효율적이고 직관적이며 빠른(제일 중요하다!)

검색기능의 구현이 가능할 듯 했다!

 

하루하루 새로운 것들을 알아가서 기쁘고 재밌다!

나아갈 길이 끝이 없어보인다는게 조금 걱정이긴 하지만

내가 할 수 있는 부분을 해내 오르다보면

산 위에서만 느낄 수 있는 경치를 볼 수 있는

시야가 트이지 않을까..! ⛰