Elasticsearch란?
엘라스틱 서치의 공식 페이지 설명을 통해 간략하게 다시 정리해보자면
- '정형 및 비정형 데이터' (텍스트, 숫자, 위치 기반 정보 등... 사실상 모든 데이터) 를 위한
오픈소스 검색 & 분석 엔진이다. - Apache Lucene을 기반으로 구축되었다.
- 2010년에 출시하였으며, ELK Stack의 핵심 구성 요소이다.
- ELK 에는 데이터를 Elasticsearch 로 전송하기 위한 데이터 수집 에이전트 - Beats 가 포함되어있다.
위의 내용으로 정리해볼 수 있을 것이다.
실제로 간단하게 체험해 본 엘라스틱설치의 동작은
간략하게 아래와 같았다.
( Local 환경의 한계로, Kibana 는 사용해보지 못하고,
Logstash 와 Elasticsearch 만 사용해볼 수 있었다.)
- DB (local 테스트 환경의 경우 - mysql) 에 데이터 저장
- Logstash 를 통해 (input -> filter -> output) 저장된 데이터를
일정 주기와 기준을 설정하여 필터링 후 Elasticsearch 서버로 전달 - 전달받은 데이터를, 설정한 기준값으로 (Analzyer) 변환하여 저장.
생성된 index 를 기준으로 데이터 search 가 가능하다!
내 연습 프로젝트의 product 는 '밀키트' 였다.
그래서 상품명이
'백선생의 새로운마을 식당에서 판매하는 7분 김치찌개'
와 같은 느낌이었는데,
위의 'nGram tokenizer' 를 통해 index 를 설정해놓으니,
'백선생의 새로운마을 식당에서 판매하는 7분 김치찌개'
의 데이터를 찾을 수 있는 조건값이
'백', '백선', '백선생', '백선생의', '백선생의 ', '백선생의 새',
'선', '선생', '선생의 ', '선생의 새', '선생의 새로' ...
...
...
의 느낌으로 하나하나 토큰화되어 저장되는 모습을 확인 할 수 있었고
'선생' 만 search word 로 전달해도
원하는 결과값을 찾을 수 있었다.
처음엔, query 안의 검색 조건을 match 를 사용하여 검색했었다.
근데, match 를 이용해보니, match 를 이용하면
입력받은 '검색어' 또한 '토큰화' 하여 다시 검색을 하더라.
예를들어 검색어를
'파이어볼트' 로 검색했더니
'파스타...' 의 결과값과
'...밀키트' 의 검색결과값을 모두 가져오더라..
'파' '이' '어' '볼' '트' 로 나누어 검색하니
'파' 와 '트' 에 각 제품 이름이 검색조건에 걸려서 검색되던 모습을 볼 수 있었다.
위와같은 버그는
match 를 term 으로 바꾸어 사용함으로써
잡아볼 수 있었다.
참고 : 엘라스틱서치 검색 쿼리 관련
간략하게 사용해봤지만
제공해주는 기능들을 살펴보면
효율적이고 직관적이며 빠른(제일 중요하다!)
검색기능의 구현이 가능할 듯 했다!
하루하루 새로운 것들을 알아가서 기쁘고 재밌다!
나아갈 길이 끝이 없어보인다는게 조금 걱정이긴 하지만
내가 할 수 있는 부분을 해내 오르다보면
산 위에서만 느낄 수 있는 경치를 볼 수 있는
시야가 트이지 않을까..! ⛰
'Dev Tools > ELK Stack' 카테고리의 다른 글
[링크] 엘라스틱서치 자동완성 구현하기 (0) | 2022.08.24 |
---|---|
[링크] 엘라스틱서치(elasticSearch) 검색 쿼리 (0) | 2022.08.18 |