**역인덱스(Inverted Index)**는 필드 값을 단어마다 쪼개서 찾기 쉽게 정리해놓은 목록이다. 글로 이해하려면 어렵다. 예시를 바로 살펴보자.
POST /products/_create/1
{
"name": "Apple 2025 맥북 에어 13 M4 10코어"
}
POST /products/_create/2
{
"name": "Apple 2024 에어팟 4세대"
}
POST /products/_create/3
{
"name": "Apple 2024 아이패드 mini A17 Pro"
}
위와 같은 3개의 도큐먼트를 Elasticsearch에 저장한다고 가정하자. 그러면 Elasticsearch는 내부적으로 아래와 같이 데이터를 저장해둔다.
단어 단위로 자르기
"name": "Apple 2025 맥북 에어 13 M4 10코어"
→ [Apple, 2025, 맥북, 에어, 13, M4, 10코어]
"name": "Apple 2024 에어팟 4세대"
→ [Apple, 2024, 에어팟, 4세대]
"name": "Apple 2024 아이패드 mini A17 Pro"
→ [Apple, 2024, 아이패드, mini, A17, Pro]
역인덱스로 저장
products의 name 필드에 대한 역인덱스
| 토큰(token) | 도큐먼트 id |
|---|---|
| Apple | [1, 2, 3] |
| 2025 | [1] |
| 맥북 | [1] |
| 에어 | [1] |
| 13 | [1] |
| M4 | [1] |
| 10코어 | [1] |
| 2024 | [2, 3] |
| 에어팟 | [2] |
| 4세대 | [2] |
| 아이패드 | [3] |
| mini | [3] |
| A17 | [3] |
| Pro | [3] |
검색을 할 경우 역인덱스를 활용
Apple 2024 아이패드라고 검색하면 역인덱스를 활용해 일치하는 단어가 많은 도큐먼트를 우선적으로 조회한다.
| 토큰(token) | 도큐먼트 id |
|---|---|
| Apple | [1, 2, 3] |
| 2025 | [1] |
| 맥북 | [1] |
| 에어 | [1] |
| 13 | [1] |
| M4 | [1] |
| 10코어 | [1] |
| 2024 | [2, 3] |
| 에어팟 | [2] |
| 4세대 | [2] |
| 아이패드 | [3] |
| mini | [3] |
| A17 | [3] |
| Pro | [3] |
이와 같은 Elasticsearch의 자체적인 로직으로 **score(점수)**를 매겨 score가 높은 순(id=3 → id=2 → id=1)으로 도큐먼트를 조회한다. 일반적으로 검색어와 관련성이 높으면 높을수록 **score(점수)**가 높게 측정된다.
Elasticsearch가 역인덱스(Inverted Index)의 기능을 가지고 있기 때문에, 단어의 순서랑 상관없이 도큐먼트를 조회해올 수 있는 것이다.
참고) 이런 작동 구조는 데이터 타입의 text 타입에 한해서만 적용된다.
<aside> 👨🏻🏫
다음 강의에서는 방금 설명한 역인덱스를 활용해 데이터를 직접 조회해보자.
</aside>