Elasticsearch 인덱스 관리 - reindex 인덱스 재구성
6312 단어 elasticsearch
구체적인 작업 단계:
(1) 처음에dynamic mapping에 의존하여 데이터를 삽입했지만 조심하지 않아 2017-01-01과 같은 날짜 형식의 데이터가 있기 때문에 ES는 자동으로 이런 형식의field를date 형식으로 비추었다. 실제로 그는string 형식이어야 한다.이때 우리가hello라는 단어를 삽입하면 오류가 발생합니다. 왜냐하면 그는 기본적으로date 형식이기 때문입니다.
PUT /my_index/my_type/3
{
"title" : "2017-01-01"
}
.결과
{
"my_index": {
"mappings": {
"my_type": {
"properties": {
"title": {
"type": "date"
}
}
}
}
}
}
그 결과 ES의 dynamic mapping은 로그 형식의 문자열을 date 형식으로 자동으로 비추는 것으로 나타났다
(2) 색인에string 형식의 title 값을 넣으면 오류가 발생합니다
PUT /my_index/my_type/4
{
"title" : "hello world"
}
결과 반환
{
"error": {
"root_cause": [
{
"type": "mapper_parsing_exception",
"reason": "failed to parse [title]"
}
],
"type": "mapper_parsing_exception",
"reason": "failed to parse [title]",
"caused_by": {
"type": "illegal_argument_exception",
"reason": "Invalid format: \"hello world\""
}
},
"status": 400
}
(3) 이때 타이틀의 유형을 수정하려면 불가능하다
PUT /my_index/_mapping/my_type
{
"properties": {
"title" : {
"type": "text"
}
}
}
결과 반환
{
"error": {
"root_cause": [
{
"type": "illegal_argument_exception",
"reason": "mapper [title] of different type, current_type [date], merged_type [text]"
}
],
"type": "illegal_argument_exception",
"reason": "mapper [title] of different type, current_type [date], merged_type [text]"
},
"status": 400
}
결과:field가 생성되면 형식을 변경할 수 없습니다.
(4) 이때 유일한 방법은 reindex를 하는 것이다. 즉, 새로운 인덱스를 다시 만들고 낡은 인덱스의 데이터를 조회한 다음에 새로운 인덱스를 가져오는 것이다.
(5) 옛 색인 이름이 old_index, 새 색인 이름은 new_index, 터미널 자바 응용, 이미 old_ 사용 중index가 작동하고 있습니다. 온라인의java 응용 프로그램을 중지하고 사용자가 사용하고 있는 index를 new_로 수정해야 합니까?index, 자바 서비스 다시 시작합니까?이 과정에서 사용자가 훑어보고 있지만 갑자기 접근할 수 없는 상황이 발생할 수 있다.
(6) 그러니까 자바에게 별명을 적용하자. 이 별명은 낡은 색인을 가리키는 것이다. 자바 앱은 먼저 사용하고 자바 앱은 good_index alias가 조작합니다. 이때 실제 가리키는 것은 오래된 index(my_index)
GET my_index/_mapping/my_type
이때 good를 찾아봅시다_index
GET /good_index/_search
{
"query": {
"match_all": {}
}
}
반환 결과:
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "my_index",
"_type": "my_type",
"_id": "3",
"_score": 1,
"_source": {
"title": "2017-01-01"
}
}
]
}
}
결과: 현재 good_index는 my_index의 별명, good_index가 my_를 가리켰습니다.index.
(7) 새 index, 제목 형식을string으로 조정
PUT /my_index_new
{
"mappings": {
"my_type" : {
"properties": {
"title" : {
"type": "string"
}
}
}
}
}
(8) scrollapi로 데이터 대량 조회
GET /my_index/_search?scroll=1m
{
"query": {
"match_all": {}
},
"sort": ["_doc"],
"size": 1
}
여기size:1, 우리가 그렇게 많은 데이터가 없기 때문이다.그래서 실제 장면은 수천 수만에 달할 수도 있고 자신의 데이터량을 볼 수도 있다.
결과 반환
{
"_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAASFVFnJyRk9uQ0IzUndxS094YUlleUxuVXcAAAAAAAEhVhZyckZPbkNCM1J3cUtPeGFJZXlMblV3AAAAAAABIVcWcnJGT25DQjNSd3FLT3hhSWV5TG5VdwAAAAAAASFYFnJyRk9uQ0IzUndxS094YUlleUxuVXcAAAAAAAEhWRZyckZPbkNCM1J3cUtPeGFJZXlMblV3",
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": null,
"hits": [
{
"_index": "my_index",
"_type": "my_type",
"_id": "3",
"_score": null,
"_source": {
"title": "2017-01-01"
},
"sort": [
0
]
}
]
}
}
(9)bulkapi로 scroll에서 찾아낸 데이터를 대량으로 새 인덱스에 쓰기
POST /_bulk
{"index": {"_index" : "my_index_new", "_type" : "my_type", "_id" : "3"}}
{"title" : "2017-01-01"}
(10) 8~9회 반복해서 한 무더기 또 한 무더기의 데이터를 조회하고 bulkapi로 한 무더기의 데이터를 새 인덱스에 대량 기록한다
(11) goods_index alias my_로 전환index_new에 따르면 자바 응용 프로그램은 인덱스 별명을 통해 인덱스에 있는 데이터를 직접 사용합니다. 자바 응용 프로그램은 정지, 제로 제출, 고가용
POST /_aliases
{
"actions" : [
{"remove" : {"index" : "my_index", "alias" : "goods_index"}},
{"add" : {"index" : "my_index_new", "alias" : "goods_index"}}
]
}
(12) 직접 goods_index 별명으로 ok 여부를 조회합니다
PUT /my_index/_alias/good_index
결과 반환
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "my_index_new",
"_type": "my_type",
"_id": "3",
"_score": 1,
"_source": {
"title": "2017-01-01"
}
}
]
}
}
큰일났다!!!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
kafka connect e elasticsearch를 관찰할 수 있습니다.No menu lateral do dashboard tem a opção de connectors onde ele mostra todos os clusters do kafka connect conectados atu...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.