역 인덱스

Elasticsearch는 데이터를 저장할 때 다음과 같이 **역 인덱스(inverted index)**라는 구조를 만들어 저장합니다.

역 인덱스(Inverted Index) 구조

이 역 인덱스는 책의 맨 뒤에 있는 주요 키워드에 대한 내용이 몇 페이지에 있는지 볼 수 있는 찾아보기 페이지에 비유할 수 있습니다. Elasticsearch에서는 추출된 각 키워드를 텀(term) 이라고 부릅니다. 이렇게 역 인덱스가 있으면 fox를 포함하고 있는 도큐먼트들의 id를 바로 얻어올 수 있습니다.

Elasticsearch는 데이터가 늘어나도 찾아가야 할 행이 늘어나는 것이 아니라 역 인덱스가 가리키는 id의 배열값이 추가되는 것 뿐이기 때문에 큰 속도의 저하 없이 빠른 속도로 검색이 가능합니다. 이런 역 인덱스를 데이터가 저장되는 과정에서 만들기 때문에 Elasticsearch는 데이터를 입력할 때 저장이 아닌 색인을 한다고 표현합니다.

검색 쿼리

1. match all query


모든 문서 검색

GET testa/_search
{
  "query": {
       "match_all": {}
  }
}

2. match query


text 타입의 필드로 검색할 때 사용하는 쿼리. 분석기를 통해 분리된 term들을 사용해 검색을 수행한다. 이 때 별도의 operator가 지정되지 않으면 OR 연산이 수행되어 term들 중 하나라도 포함된 문서가 검색된다.

"보은"라는 텍스트는 어떻게 분석되는지 먼저 확인해보자.

GET testa/_analyze
{
  "analyzer": "nori_analyzer",
  
  "text": "보은"
}

'보', '은' 두 개의 term으로 분리된다.