본문 바로가기
elastic search

[elastic search] 엘라스틱 서치란(elastic search, kibana 사용법)

by devjh 2022. 8. 29.
반응형

이번 게시글에서는 elastic search에 대해 정리합니다.

 

1. elastic search란

검색엔진이자 분산저장소입니다.
일반적으로 JSON 형식의 데이터를 저장하며 루씬 기반으로 개발되어있어 빠른 검색이 가능합니다.
서비스의 검색을 위해 사용되거나, 로그 등의 데이터를 검색할때 자주 사용됩니다.(ELF, EFK 등)
elastic search와 함께 딸려오는 kibana는 elastic search를 쓰기 쉽게 만들어주는 툴이며

결과를 시각화하는 기능과 dsl을 질의할 툴을 제공하는 등 추가기능을 제공합니다.

2. 언제 사용하면 좋을까

내부적으로 복잡한 과정(Caharacter filter, Tokenizer, Token filter를 이용한 구문 분석 및 Inverted index table 구축)을 거쳐 elastic search에 저장된 데이터들은 검색에 특화되어 있으므로 특정하기 힘든 내용으로 검색을 해야되는 상황에 사용하기 적합합니다.
특정되지 않은 데이터로도 O(1)에 준하는 검색성능을 보여줍니다.

3. elastic search 의 용어 정의

rdb와 비교했을때 elastic search는 아래와 같은 아키텍쳐를 가지고 있습니다.
index, field, document가 핵심 용어입니다.
elastic search는 json 문서를 저장하게 되는데 어디에 저장할지 index를 설정해서 저장하게 됩니다.

저장하는 json의 key는 field라고 하며 json 문서자체는 document라고 칭합니다. type은 index 내부에서 테이블을 쪼개는 개념입니다.

 

4. elastic search 사용법

elastic search는 검색엔진으로 알려져있지만 근본적으로는 저장소이므로 익숙해지는데는 crud를 해보는게 가장 좋습니다.
http request를 사용하여 dsl을 사용하거나, kibana를 통해 dsl을 사용할 수 있습니다.

 

(1). create

elastic search는 schemaless라는 특성덕분에 따로 database를 만들어주지 않더라도 데이터 저장(인덱싱)이 가능합니다.
my_index(database)에 아래와 같은 json파일을 저장합니다.

데이터를 저장하게되면 샤드라는 곳에 기록되어 디스크에 저장됩니다.

// index는 my_index, type은 _doc이라는 스키마에 저장하게 됩니다.
// es는 스키마리스이므로 따로 생성하지 않아도 됩니다(type은 미리 정해진 규칙에 맞아야 합니다)

// 1번 문서id에 해당 json을 저장합니다.
PUT my_index/_doc/1
{
  "name": "Tom",
  "age": "20"
}

// 문서번호를 지정하고 싶지 않다면 POST를 사용합니다.
POST my_index/_doc
{
  "name": "John",
  "age": "21"
}

(2) read

간단한 조회기능은 아래의 DSL을 이용합니다.

// my_index의 내용 전체 조회
GET my_index/_search
// 1번 id 조회
GET my_index/_doc/1

_search아래에 query필드를 작성하고 match_all, match, bool, must등을 포함한 dsl을 작성하면 원하는 문서를 가져올수 있습니다.

루씬기반으로 개발되었기에 검색속도가 빠릅니다.
자세한 사용법은 공식문서를 참고합니다.(kibana를 주로 사용하는경우 검색 쿼리를 몰라도 클릭몇번으로 검색쿼리를 짤수있으므로 kibana를 주력으로 사용하는경우 가볍게 읽어봅니다)

 

5.1 풀 텍스트 쿼리 - Full Text Query - Elastic 가이드북

검색어가 여럿일 때 검색 조건을 OR 가 아닌 AND 로 바꾸려면 operator 옵션을 사용할 수 있습니다. 이 경우 문법이 조금 달라지는데, <필드명>:<검색어> 형식으로 하던 것을 <필드명>: { "query":<검색어>

esbook.kimjmin.net


(3) delete

// 1번 문서 삭제
DELETE my_index/_doc/1

// my_index 전체 삭제
DELETE my_index

 

5. kibana 사용법

(1). index pattern 생성

kibana에 들어가 사이드바에 Management를 클릭해 인덱스 패턴을 생성할 수 있습니다.
my_* 으로 인덱스 패턴을 지정하게 되면 my_로 시작되는 모든 document를 묶을수 있습니다
날자별로 index가 변경된다면(my_index-2022-08-29 등) 에스터리스크를 사용하면 편하게 시각화 할 수 있습니다.
저장된 document에 iso 8601로 설정된 시간필드가 들어가게 된다면 로그가 언제 얼마나 들어왔는지 그래프화 할 수 있습니다.

 

(2). 결과 확인

사이드바에서 Discover 탭을 누르면 사진과 같은 화면으로 이동되며
생성된 index pattern이 왼쪽 상단 콤보박스에 표시됩니다. 해당버튼을 클릭해 로그를 검색할수 있습니다.

(GET my_index/_search 의 결과를 시각화)
Add a filter 버튼을 누르거나 + 돋보기 버튼을 눌러 추가적인 쿼리(filter)를 쉽게 적용시킬수 있습니다.

반응형

댓글