본문 바로가기
AI-Tech 부스트캠프

Elasticsearch (엘라스틱서치)

by Alan_Kim 2023. 1. 20.
728x90
반응형

 

Elasticsearch

Elasticsearch는 비정형 데이터 검색에 최적화된 데이터베이스(search engine)이다.

 

Elasticsearch의 기원

런던의 아파트에서 살고 있는 Shay Banon은 구직중 남는 시간에 아내의 요리법 목록을 위한 검색 엔진을 만들었다. 이 최초의 버전이 컴파스(Compass ,2004)이고, 두번째 버전이 Elasticsearch(2010)이다.

 

Elasticsearch와 관련된 용어들

  • 시스템 아키텍트가 신경써야 할 부분
    • Cluster
    • Node
    • Shard
    • Replica
  • 내(데이터 엔지니어)가 신경써야 할 부분
    • Index
    • Documents
    • Mappings
    • Analyzer
    • Scoring

관계형 데이터베이스(RDB) VS 엘라스틱 서치(Elasticsearch)

관계형 데이터베이스 (mysql) 엘라스틱 서치
Database index
Table Type
Row Document
Column Field
Schema Mapping
index 설정가능 모두 index 되어있음
SQL Query DSL

 

Index

  • 원본 데이터에 빠르게 접근하기 위한 추가적인 데이터 집합
  • 데이터가 저장될 때 그 데이터를 위한 인덱스 데이터를 자동으로 생성
  • 데이터의 타입이나 목적성에 따라 구현 방식만 다를 뿐 결국 추가적인 저장용량을 쓰면서 검색 속도를 향상시키는 방법이다.
    • B-tree, B+tree, Hash Table, Inverted index ...

 

시간 복잡도 (time complex)

Big이라는 단어를 포함하는 문서들을 찾는데 걸리는 시간 복잡도

 

Elasticsearch O(1)

Term Document
Big Doc1, Doc2, ...
Data Doc1, Doc3, ...

 

RDB O(n)

Document_id Content
Doc1 Big data is very big
Doc2 Data science is science

 

어떻게 Term을 추출해야 좋을까?

Term과 Document를 매칭을 시켜야 하는데...

Text mining 101스타일

  • 특수문자 제거, 원형복원, 불용어제거 등
  • Analyzer를 활용
    • Tokenizer: 문장 자르기
    • Filter: 번형, 제거하기

 

Inverted Index

Term Docs (doc_id, offset)
'The' '{(1,0), (1,32), (2,0)}'
'big' '{(1,4)}'
'brown' '{(1,8), (2,4)}'

Analyzer

 

Tokenizer : 어떤 기준으로 단어를 자를 것인가?

 

Tokenizer reference | Elasticsearch Guide [8.6] | Elastic

A tokenizer receives a stream of characters, breaks it up into individual tokens (usually individual words), and outputs a stream of tokens. For instance, a whitespace tokenizer breaks text into tokens whenever it sees any whitespace. It would convert the

www.elastic.co

Filter: 어떤 단어를 어떻게 바꿀 것인가?

Char Filter: Before tokenizing

  • HTML Strip Character Filter
  • Mapping Character Filter
  • Pattern Replace Character Filter

Token Filter: After tokenizing

  • 우리가 알고 있는 대부분의 텍스트 전처리 기법들
  • stemmer, n-gram, stop words, shingle, uppercase, lowercase

Scoring: 쿼리와 문서간의 점수계산

Query 또한 analyzer에 의해 분해가 되고, 이렇게 분해된 term들을 활용하여, 이전에 index된 문서와 점수 계산

BM25가 기본이지만, 다양한 옵션을 제공

  • BM25
  • DFR
  • DFI
  • IB
  • LM Dirichlet
  • LM Jelinek Mercer

Mappings

  • 문서가 어떠한 필드들을 갖고 이들을 어떻게 인덱싱 할지를 정의하는 과정
  • 최초에 인덱스를 생성할 때 설정
  • 필요에 따라 각 field에 Analyzer도 정의

Settings

  • Analyzer 관련 세팅
  • Similarity 관련 세팅
  • Shard, Replica 등과 같은 아키텍쳐적인 세팅

예시 코드

def set_index(self):
    """index 생성 과정"""
    index_config = {
        'settings': {
            'analysis': {
                'analyzer': {
                    'nori_analyzer': {
                        'type': 'custom',
                        'tokenizer': 'nori_tokenizer',
                        'decompound_mode': 'mixed',
                        'filter': ['shingle'],
                    }
                }
            }
        },
        'mappings': {
            'dynamic': 'strict',
            'properties': {
                'document_text': {
                    'type': 'text',
                    'analyzer': 'nori_analyzer',
                }
            }
        }
    }

 

Install

아래 깃허브 저장소 Read_me 참고

https://github.com/thejungwon/search-engine-tutorial

 

GitHub - thejungwon/search-engine-tutorial

Contribute to thejungwon/search-engine-tutorial development by creating an account on GitHub.

github.com

 

728x90
반응형

'AI-Tech 부스트캠프' 카테고리의 다른 글

[특강] AI와 저작권법  (0) 2023.01.20
[특강] Kaggle에 대하여  (0) 2023.01.20
[특강] 자연어 처리를 위한 언어 모델의 학습과 평가  (0) 2022.12.31
2021_10_06_(수)  (0) 2021.10.06
2021_10_01_(금)  (0) 2021.10.01

댓글