Elasticsearch 기본개념 정리 (5) : inverted Index에 대해서

 ES의 검색과정에서 가장 중요하게 알고 있어야할 개념은 바로 'Inverted Index'이다.

 

ES에서의 검색과정은 위와 같이 어떤 검색어가 들어오면 해당 검색어를 분석하고

그 검색어를 inverted Index 내에서 검색하여 그 결과를 표시해준다.

 

그럼 이 Inverted Index란 무엇일까?

 

 

Inverted Index

ES에서 Inverted Index란 문자열을 분석하고 난뒤 그 결과를 저장하고 있는 구조체를 말한다.

위 그림을 보면 현재 document 2개가 저장되어있는데 

book이라는 문자열은  document 두개 모두 가지고 있기에 오른쪽 표와 같이 book 토근에 1,2 이렇게 구조화하여 저장할 수 있다.  또 kernel 이라는 문자열은 첫번재 document만 가지고 있기에 kernel : 1 이렇게 구조화하여 저장하고 있다.

 

이렇듯 Inverted Index란 ES에서 저장하고 있는 document들의 문자열을 분석하고 그 결과를 저장하고 있는 구조체를 말하며 위의 예시는 이해를 위한 예시이지 실제로는 더욱 복잡한 과정으로 생성되어 저장되어진다.

 

 

애널라이저(Analyzer)

 Inverted Index를 만들어내기 위해서 필요한 토큰(token)을 생성하는 과정에서 애널라이저가 동작하게 된다.

이러한 애널라이저는 대표적으로 character filter, tokenzier, token filter 3개가 있을 수 있다.

 

예를 들어 character filter 에서는 특수문자를 제거하고 

                tokenzier에서는 공백을 기준으로 나누고

                token filter에서는 모든 문자를 소문자로 치환하는 등의 일련의 과정들을 수행하게 된다.

 

 이러한 애널라이저는 다양한 종류가 존재하며 애널라이즈를 커스터마이징해서 자신이 원하는대로 사용할 수 도있다.

 

 

애널라이저 Test 해보기

GET /_analyze 요청을 통해서 애널라이저가 어떻게 동작하는지 테스트해볼 수 있다.

어떠한 애널라이저를 사용할 것인지를 정해주고 어떤 문장을 분석을 할지 text를 정해주면

 

아래와 같이 어떠한 토큰이 만들어지는지 response를 보내준다.

linux kernel 이라는 텍스트가 standard 애널라이즈에 의해 위와 같은 토큰이 생성됨

 

정리해보면

 검색어 분석과정에는 analyzer가 동작하고 analyzer에 의해서 생성된 토큰을 inverted index에서 검색한다.

 

 이러한 검색과정은 Indexing 과정과는 다르게 프라이머리 샤드와 레플리카 샤드 모두가 처리할 수 있다.