본문 바로가기
DevOps/EFK stack

Elasticesearch 란? (DSL query)

by 푸푸망나뇽 2021. 4. 3.
반응형

Elasticsearch란

Elasticsearch는 Apache Lucene(아파치 루씬) 기반의 java 오픈소스 분산 검색 엔진.

 

* 검색엔진이란?

정보를 수집해 검색 결과를 제공하는 프로그램

 

Elasticsearch는 다양한 검색서비스에 활용되기도 하며, ELK 등의 로그모니터링 시스템에서도 활용되고 있다.

 

 

Elasticsearch 특징

Elasticsearch는 1)Apache Lucene(아파치 루씬) 기반의 java 2)오픈소스 3)분산 검색 엔진.

 

1) 아파치 루씬 기반 : 검색 속도가 빠르다

아파치 루씬은 자바로 개발된 검색 서비스용 라이브러리로 전체 텍스트 검색에 뛰어나다.

문서가 색인될 때부터 검색 가능해질 때까지의 대기 시간이 보통 1초로 실시간 검색이 가능하다.

따라서, Elasticsearch는 보안 분석, 인프라 모니터링 같은 시간이 중요한 사용 사례에 이상적이다.

2) 오픈소스 : 다양한 플러그인을 통한 확장 가능 

Elasticsearch는 오픈소스로 개발자들이 필요에 따라 만든 다양한 플러그인이 존재한다.따라서 필요한 기능에 대한 플러그인을 적용하여 기능을 확장할 수 있다.예를 들어 한국어 검색에 형태소 분석기 플로그인을 활용하여 확장이 가능하다.

 

3) 분산처리 시스템: 안정적이며 빠른 검색가능

 Elasticsearch에 저장된 문서는 샤드라고 하는 여러 다른 컨테이너에 걸쳐 분산되며, 이 샤드는 복제되어 하드웨어 장애 시에 복사된 샤드를 활용하여 복구하므로 데이터의 안정성을 확보할 수 있다.
또한 
Elasticsearch의 분산적인 특징은 수백 개(심지어 수천 개)의 서버까지 확장하고 병렬처리가 가능하여 빅데이터 분석이 가능하며 처리속도가 빠르다.


Elasticsearch DSL

Elasticsearch는 검색을 위한 쿼리 기능을 제공하며 이를 Query DSL (Domain Specific Language) 라고 한다.대표적인 쿼리문 몇가지를 살펴보겠다.

 

match_all

해당 인덱스의 모든 도큐먼트를 검색.

SELECT * 과 같음.

{  
   "query":{  
      "match_all":{}
   }
}

 

match

가장 일반적인 필드검색 쿼리.

index1 인덱스의 detail 필드에 'hot'이 포함된 모든 document를 검색.

GET index1/_search
{
  "query": {
    "match": {
      "detail": "hot"
    }
  }
}

 

여러단어를 검색하고 싶다면 단어를 공백을 두고 나열하면 or 로 검색되어

나열된 단어 중 하나라도 포함된 document를 검색.

아래는 hot 과 cool 중 하나라도 포함된 document를 검색하는 쿼리 예제

GET index1/_search
{
  "query": {
    "match": {
      "detail": "hot cool"
    }
  }
}

 

or문이 아닌 and문으로 검색하고 싶다면 operator옵션을 사용

GET index1/_search
{
  "query": {
    "match": {
      "message": {
        "query": "hot cool",
        "operator": "and"
      }
    }
  }
}

 

bool

bool쿼리를 사용하여 여러쿼리를 조합해 검색가능하며 bool쿼리 내 bool쿼리를 또 사용가능.

아래 4개의 인자를 활용하여 쿼리 조합가능

  • must : must 절에 지정된 모든 쿼리가 일치하는 document 검색
  • should : should 절에 지정된 모든 쿼리 중 하나라도 일치하는 document 검색
  • must_not : must_not 절에 지정된 모든 쿼리가 모두 일치하지 않는 document 검색 (쿼리가 거짓인 문서)
  • filter : must와 같이 filter 절에 지정된 모든 쿼리가 일치하는 document를 검색하지만 score를 무시 (must보다 검색속도가 빠름)

아래는 age가 40이고 state가 RUN이 아닌 document를 검색하는 예제

 

GET index1/_search
{
  "query": {
    "bool": {
      "must": [
         { "match": { "age": "40" } }
      ],
      "must_not": [
         { "match": { "state": "RUN" } }
      ],
      "should": [
        { <쿼리> }, …
      ],
      "filter": [
        { <쿼리> }, …
      ]
    }
  }
}

 


 

참고enjoyinjoanne.tistory.com/17

 

[IT교양] '엘라스틱 서치(Elasticsearch)'란?

Background 저는 영업인(Seller)입니다. C, Java, Phython이 프로그래밍 언어이고, R과 하둡으로 빅데이터 분석을 하는 군! 정도만 이해하고 있는 IT셀러입니다. 영업인으로서, HOT하지만 어려운 IT기술 교양

enjoyinjoanne.tistory.com

twofootdog.tistory.com/53

 

Elasticsearch 개념 및 구조

이번 글에서는 그동안 사용해왔던 Elasticsearch의 개념 및 구조에 대한 정리를 해보고자 한다. 1. Elasticsearch 개념 1-1. 소개 Elasticsearch란 아파치 루씬(Lucene) 기반의 오픈소스 실시간 분산 검색 엔진으

twofootdog.tistory.com

victorydntmd.tistory.com/314

 

[Elasticsearch] 입문하기(4) - 다양한 검색 방법 ( Query DSL )

이번 글에서는 쿼리를 통해 검색을 하는 Query DSL( Domain Specific Language )에 대해 알아보겠습니다. 실습을 위한 테스트 데이터 셋팅과 Search API 개념과 관련하여 이전 글을 먼저 읽으시길 권장합니

victorydntmd.tistory.com

 

반응형

'DevOps > EFK stack' 카테고리의 다른 글

Elasticsearch (Aggregation)  (0) 2021.06.30
Kubernetes + EFK stack 배포하기  (0) 2021.04.29
MSA  (0) 2021.04.06
Fluentd & Kibana  (0) 2021.04.03

댓글