Elasticsearch는 데이터를 저장할 때 다음과 같이 **역 인덱스(inverted index)**라는 구조를 만들어 저장합니다.
역 인덱스(Inverted Index) 구조
이 역 인덱스는 책의 맨 뒤에 있는 주요 키워드에 대한 내용이 몇 페이지에 있는지 볼 수 있는 찾아보기 페이지에 비유할 수 있습니다. Elasticsearch에서는 추출된 각 키워드를 텀(term) 이라고 부릅니다. 이렇게 역 인덱스가 있으면 fox를 포함하고 있는 도큐먼트들의 id를 바로 얻어올 수 있습니다.
Elasticsearch는 데이터가 늘어나도 찾아가야 할 행이 늘어나는 것이 아니라 역 인덱스가 가리키는 id의 배열값이 추가되는 것 뿐이기 때문에 큰 속도의 저하 없이 빠른 속도로 검색이 가능합니다. 이런 역 인덱스를 데이터가 저장되는 과정에서 만들기 때문에 Elasticsearch는 데이터를 입력할 때 저장이 아닌 색인을 한다고 표현합니다.
모든 문서 검색
GET testa/_search
{
"query": {
"match_all": {}
}
}
text 타입의 필드로 검색할 때 사용하는 쿼리. 분석기를 통해 분리된 term들을 사용해 검색을 수행한다. 이 때 별도의 operator가 지정되지 않으면 OR 연산이 수행되어 term들 중 하나라도 포함된 문서가 검색된다.
"보은"라는 텍스트는 어떻게 분석되는지 먼저 확인해보자.
GET testa/_analyze
{
"analyzer": "nori_analyzer",
"text": "보은"
}
'보', '은' 두 개의 term으로 분리된다.