3장 데이터 색인, 변경, 삭제
by Dark
3장 데이터 색인, 변경, 삭제
데이터 색인, 변경과 삭제를 알아보기 이전에 기본적인 Concept 에 대해 이해하는 것이 중요합니다.
이번 장에서 살펴볼 내용들에 언급되는 용어들의 이해를 돕기 위해 아래와 같은 테이블을 만들어 보았습니다.
Concept
Index | Type | Mapping | Field | Field Type | Document |
---|---|---|---|---|---|
Database | Table | Schema + Index | Column | Data Type | Row |
- 테이블의 상단은 Elasticsearch 이고, 하단은 RDBMS 용어입니다.
- RDBMS 에서 Table 은 Column 들로 이루어져 있고, 개별 Column 들은 특정 Data Type 이 지정되어 있습니다.
- Elasticsearch 에서 Type 은 Field 들로 이루어져 있고, 개별 Field 들은 특정 Field Type 이 지정되어 있습니다.
- RDBMS 에서는 Table 의 Schema 가 무엇인지를 확인하여 Data Type 을 살펴봅니다.
- Elasticsearch 에서는 Type 의 Mapping 정보가 무엇인지를 확인하여 Field Type 과 어떻게 색인될 수 있는지 정보를 확인합니다.
데이터 색인 ( Data Indexing )
Mapping
Elasticsearch 에서 Mapping 이란 Data 를 어떤 방식으로 Indexing 할 지에 대한 메타 정보를 제공해주는 개념입니다.
이에 따라, Field 의 Type 을 정의하고 어떤 Analyzer 를 통해 각 Field 들을 Indexing 할지에 대한 정보가 저장되어 있습니다.
Static Mapping
Static Mapping 은 Elasticsearch 에게 해당 Type 은 어떤 Data 들이 유입될 예정이고, 이들에 대해서는 미리 정의한 정보를 토대로 Indexing 을 처리하길 원하는 경우에 사용하는 방법입니다.
이에 대한 설명을 위하여 실제 색인을 하기에 앞서 Index 와 Document 를 보관할 Type 을 생성해보겠습니다.
PUT {index}
PUT get-together
- get-together 라는 Index 를 생성하였습니다.
PUT {index}/_mapping/{type}
PUT get-together/_mapping/new-events
{
"new-events": {
"properties": {
"host": {
"type": "string"
}
}
}
}
- get-together 라는 Index 내부에 new-events 라는 Type 을 생성하였습니다.
- new-events Type 의 mapping 정보를 설정하였습니다.
- new-events type 은 host 라는 field 를 가지게 되고 이는 string 이라는 field type 을 갖도록 설정하였습니다.
PUT {index}/{type}/{documentId}
PUT get-together/new-events/1
{
"host" : "localhost"
}
- document 의 id 를 1 로 지정하였습니다.
- document 의 host field 의 값으로 localhost 를 지정하여 indexing 하였습니다.
Dynamic Mapping
Dynamic Mapping 은 Elasticsearch 에게 어떠한 Data 가 유입될지 모르는 경우 사용하는 방법입니다.
PUT {index}/{type}/{documentId}
PUT dynamic-index/dynamic-type/1
{
"host" : "localhost"
}
- document 의 id 를 1 로 지정하였습니다.
- document 의 host field 의 값으로 localhost 를 지정하여 indexing 하였습니다.
Static vs Dynamic Mapping
PUT dynamic-index/dynamic-type/1
{
"int" : 1
}
PUT dynamic-index/dynamic-type/2
{
"int" : "localhost"
}
- 최초에 추론하여 설정되었던 Field type 이 달라진 경우 Indexing 시 문제가 발생할 수 있다.
- Document 의 type 이 제대로 관리 되지 않아 불필요한 field 들에 대한 mapping 정보들이 쌓일 수 있다.
Field
Meta Field
Field
Indexing
analyzed, not_analyzed, no
아래와 같이 Index 의 종류에 따라 어떻게 검색을 하게 되는지 확인하기 위하여 테스트용 Index 와 Type 을 생성해보도록 하겠습니다.
PUT static-index/_mapping/static-type
{
"static-type": {
"properties": {
"notAnalyzedText": {
"type": "string",
"index": "not_analyzed"
},
"analyzedText": {
"type": "string",
"index": "analyzed"
},
"no": {
"type": "string",
"index": "no"
}
}
}
}
not_analyzed
notAnalyzedText field 에 소문자로 검색을 시도해보도록 하겠습니다.
POST static-index/static-type/_search
{
"query": {
"filtered": {
"filter": {
"term": {
"notAnalyzedText": "localhost"
}
}
}
}
}
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": [
]
}
}
analyzed
POST static-index/static-type/_search
{
"query": {
"filtered": {
"filter": {
"term": {
"analyzedText": "localhost"
}
}
}
}
}
no
POST static-index/static-type/_search
{
"query": {
"filtered": {
"filter": {
"term": {
"no": "Localhost"
}
}
}
}
}
Reference
Subscribe via RSS