elasticsearch에서는 색인(indexing) 시간이 많이 소요되기 때문에, 색인하는 과정에서 데이터를 검색하다가 데이터 손실을 볼 수 있다. 따라서 색인할 때는 2 개의 색인(index)을 만들어 색인 작업(indexing)을 교대로 하도록 한다.
zero downtime 으로 가능한 방법이다.
임의의 이름으로 poi_suggest_v1이란 색인(index)를 생성한다.
curl -s -XPUT http://localhost:9200/poi_suggest_v1/ -d '{
"settings": {
"index": {
"number_of_shards": 1,
"number_of_replicas": 0
}
},
"mappings": {
"suggest": {
"properties": {
"title": {
"index": "not_analyzed",
"type": "string"
}
}
}
}
}'
poi_suggest_v1에 별명(alias)를 준다.
curl -XPOST localhost:9200/_aliases -d '
{
"actions": [
{ "add": {
"alias": "poi_suggest",
"index": "poi_suggest_v1"
}}
]
}
'
head 플러그인 UI로 보면 별명(alias)가 v1으로 되어 있는 것을 볼 수 있다. (사실 v2 는 아직 생성전이다.)
별명(alias)인 poi_suggest으로 데이터 한 건을 읽어본다. 읽어지고 실제 색인은 _index 속성으로 표시된다.
애플리케이션은 poi_suggest로 보고 있도록 한다.
curl -XGET localhost:9200/poi_suggest/suggest/1
{"_index":"poi_suggest_v1","_type":"suggest","_id":"1","found":false}
poi_suggest_v2를 생성한다.
curl -s -XPUT http://localhost:9200/poi_suggest_v2/ -d '{
"settings": {
"index": {
"number_of_shards": 1,
"number_of_replicas": 0
}
},
"mappings": {
"suggest": {
"properties": {
"title": {
"index": "not_analyzed",
"type": "string"
}
}
}
}
}'
poi_suggest_v2로 데이터를 가져와 색인(indexing) 하는 작업을 한다. 또는 v1에서 v2로 복사하는 작업을 진행한다.
(전문용어로 scroll-reindex)
색인을 받아들일 준비가 되면, 별명(alias)를 poi_suggest_v2로 변경한다.
curl -XPOST localhost:9200/_aliases -d '
{
"actions": [
{ "remove": {
"alias": "poi_suggest",
"index": "poi_suggest_v1"
}},
{ "add": {
"alias": "poi_suggest",
"index": "poi_suggest_v2"
}}
]
}
'
head 플러그인 UI로 보면 다음과 같을 것이다.
애플리케이션에서 호출하면 poi_suggest는 그대로 존재하는 것처럼 보이지만, 실제 색인은 _index의 결과처럼 poi_suggest_V2 가 된다.
curl -XGET localhost:9200/poi_suggest/suggest/1
{"_index":"poi_suggest_v2","_type":"suggest","_id":"1","found":false}
'Elasticsearch' 카테고리의 다른 글
[elasticsearch] sub aggregation의 개수 제한이 있을까? (0) | 2015.07.04 |
---|---|
[elasticsearch] copy_to 용법 (0) | 2015.07.04 |
[elasticsearch] attachement 타입 (0) | 2015.06.30 |
[elasticsearch] Geo shape 확장 - spatial4j, jts (0) | 2015.06.29 |
[elasticsearch] geo point 매개변수 (0) | 2015.06.28 |