브렌쏭의 Veritas_Garage

[ELK] Elastic Search 본문

[Project_하다]/[Project_공부]

[ELK] Elastic Search

브렌쏭 2024. 8. 12. 11:44

Elastic Search의 특징

  • 전문 검색(Full Text Search)
    • 전문 검색이란, 특정 인덱스나 특정 필드(컬럼) 대신 여러개의 인덱스나 여러개의 필드를 함께 색인한다.
    • 전체에서 특정 단어가 포함된 문서를 검색하는 것이 가능하다.
  • 통계 분석
    • 비정형 로그 데이터를 수집하고 한곳에 모아 통계 분석을 할 수 있다.
  • 멀티테넌시 (Multi-teneancy)
    • 검색할 필드명으로 여러 개의 인덱스를 한번에 조회할 수 있다.
    • 여러개의 인덱스를 한번에 조회할 수 있어서, 여러개의 테넌트가 한 서버에 데이터를 저장하고 검색할 수 있다.
  • 역색인(Inverted index)
    • 역색인 구조를 통해서 특정 단어를 찾을 때 문서 전체에서 찾는 것이 아닌, 단어가 포함된 특정 문서의 위치를 알아내어 빠르게 결과를 찾아낼 수 있다.
  • 분산 환경
    • Cluster > Node > Shard > Document > Field
    • 엘라스틱서치에서는 데이터를 여러 필드(Field)로 구성된 도큐먼트(Document)라는 JSON 개체로 저장한다. 이 도큐먼트 한장 한장은 다시 샤드(shard)라는 작은 단위로 나뉘어 제공하여 데이터를 분산하여 빠르게 처리한다.
    • 각 샤드들을 원본과 여러개의 레플리카(복제본)로 만들어 서로 다른 노드(node)라는 엘라스틱서치의 인스턴스 단위에 나누어 저장한다.
    • 이 노드들은 다시 하나의 클러스터(cluster) 단위로 최종 관리된다.
  • 준실시간 검색, Near-time search
    • 엘라스틱서치는 데이터 저장 시점에 해당 데이터를 색인한다.
    • 색인된 데이터는 1초 뒤에 검색이 가능해져서 실시간으로 검색이 불가능.
    • 또한 내부적으로 커밋(commit), 플러쉬(flush)와 같은 복잡한 과정을 거칩니다.
  • 트랜잭션과 롤백 기능이 없다.
    • 전체적인 클러스터의 성능 향상을 위해 비용 소모가 큰 롤백과 트랜잭션 기능이 없다.
  • RESTful API
    • 엘라스틱서치는 RESTful API를 제공하여, HTTP 프로토콜을 통해 데이터를 주고 받을 수 있다.
    • 이를 통해, 다양한 언어와 통신이 가능하다.

비정형 데이터

  • 비정형 데이터란, 구조화된 데이터가 아닌 데이터를 말한다.
  • RDBMS에서는 정해진 스키마에 맞춰 데이터를 저장하고, 검색한다.
  • 하지만, 비정형 데이터는 스키마가 정해져 있지 않아서, 데이터를 저장하고 검색하는데 어려움이 있다.

Multi Teneancy

  • 멀티 테넌시란, 여러 사용자가 하나의 소프트웨어를 사용하는 것을 말한다.
  • 사용시에 각 사용자의 데이터를 분리하여 사용하는 것
  • 엘라스틱서치에서는 멀티테넌시를 지원하여, 여러 사용자가 하나의 서버에 데이터를 저장하고 검색할 수 있다.

역색인(Inverted index)

  • 역색인은 특정 단어가 포함된 문서의 위치를 알아내어 빠르게 검색할 수 있도록 하는 구조이다.
  • 일반 DB의 인덱스: 책에서 특정 페이지를 빠르게 찾기 위해 페이지 번호와 해당 페이지의 내용을 연결해 놓은 리스트와 같다.
    • 예를 들어, "페이지 3에는 어떤 내용이 있다"라는 식.
    • 특정 열(column)의 값을 기준으로 데이터의 위치를 빠르게 찾을 수 있다.
  • 엘라스틱서치의 역색인: 이건 책의 목차와 비슷하다.
    • 단어 하나하나가 인덱스에 저장되고, 각 단어가 어느 문서(혹은 페이지)에 있는지 기록해 둔다.
    • 특정 단어를 검색할 때, 그 단어가 포함된 위치를 빠르게 찾을 수 있다.

주요 차이점:

  • 일반 인덱스는 특정 열의 값을 기준으로 데이터를 찾는 데 사용되며, 주로 숫자나 특정 필드에 대해 빠른 검색을 제공한다.
  • 역색인은 단어를 기준으로 여러 문서에서 단어의 위치를 찾는 데 사용되며, 주로 텍스트 기반 검색에 적합하다.

마치 책과 같이 역색인은 텍스트 검색에 특화된 반면, 일반 인덱스는 엑셀이나 표처럼 구조화된 데이터 검색에 더 적합하다.

Match :: 점수 알고리즘

Elasticsearch에서 match 쿼리를 사용했을 때,
관련성 점수는 단순히 쿼리와 문서의 일치 여부뿐만 아니라,
해당 인덱스 내의 문서들 전체를 고려한 여러 요소에 의해 결정.

그래서 완전 일치하는 경우에도 점수가 1.0이 아닐 수 있다.

TF-IDF (Term Frequency-Inverse Document Frequency)

  • Elasticsearch는 기본적으로 TF-IDF 알고리즘을 사용하여 문서의 관련성 점수를 계산한다.
  • 이 알고리즘은 특정 단어가 문서에서 얼마나 자주 나타나는지(Term Frequency)와 그 단어가 전체 문서에서 얼마나 흔한지(Inverse Document Frequency)를 고려한다.

TF-IDF
: 특정 단어가 특정 문서에서 얼마나 자주 나타나는지와, 그 단어가 전체 문서에서 얼마나 흔한지를 종합적으로 고려하여 점수를 계산하는 알고리즘

문서의 길이

  • 문서의 길이도 점수에 영향을 줄 수 있다.
    • 짧은 문서에서 특정 단어가 나타나면 점수가 더 높게 나타나는 경향이 있다.
    • 반면, 긴 문서에서는 같은 단어의 중요도가 상대적으로 낮아져 점수가 낮아질 수 있다.

Norms (Normalization)

  • Elasticsearch는 각 필드에 대해 노멀라이제이션을 수행한다.
    • 이는 필드의 길이, 빈도 등을 기준으로 점수를 조정하는 과정이다. 이로 인해 문서 간에 동일한 단어가 있더라도 다른 점수를 받을 수 있다.

정규화
: 각 필드의 길이, 빈도 등을 기준으로 점수를 조정하는 과정

BM25 알고리즘

  • Elasticsearch는 기본적으로 BM25라는 검색 알고리즘을 사용한다.
  • 이 알고리즘도 TF-IDF를 기반으로 하지만, 특정 필드의 길이, 빈도, 그리고 검색어가 얼마나 자주 등장하는지를 종합적으로 고려한다.

인덱스 내 다른 문서의 영향

  • 해당 인덱스 내에 다른 문서들이 얼마나 많이 있고, 그 문서들이 어떤 내용을 포함하고 있는지도 점수에 영향을 미친다.

 

Comments