elasticsearch 변경mapping (끊임없이 서비스 재구성 인덱스)

3266 단어 elasticsearch
Elasticsearch의 맵핑이 생성되면 필드만 추가할 수 있고 맵핑된 필드는 수정할 수 없습니다.그러나 현실은 왕왕 그렇지 않다. 때로는 한 필드를 늘리면 마치 헝을 깁은 것 같고, 하나는 괜찮지만, 보충이 많을수록 결국은 자신이 참담하게 느껴진다.어떡해??
여기에 맵핑을 수정하는 방법이 있습니다. 그것은 인덱스를 다시 만들고 새로운 맵핑을 만드는 것입니다.너는 이것이 만약 생산 환경에 있다면 괜찮겠느냐고 물어볼 수도 있다.답은 당신이 처음부터 적당한 디자인을 취했다면 이것은 완전히 매끄러운 과도를 할 수 있다는 것이다.
어떤 합리적인 설계를 채택합니까?프로그램이 색인 라이브러리에 접근할 때, 진정한 indexName을 사용하지 않고 항상 같은 뜻을 사용합니다.reindex가 데이터를 완성한 후에 이전의 동의어를 수정하면 됩니다.알겠어요?
 
위의 사고방식을 참고하여 우리는 한 걸음 한 걸음 한다.
step1, 색인을 만듭니다. 이 색인의 이름은 버전 번호가 가장 좋습니다. 예를 들어 my_index_v1,my_index_등등
step2, 이 색인을 가리키는 동의어를 만듭니다.
curl -XPOST localhost:9200/_aliases -d '
{
    "actions": [
        { "add": {
            "alias": "my_index",
            "index": "my_index_v1"
        }}
    ]
}
'

 
이때, 너는 동의어를 통해 my_index 액세스.색인 만들기, 색인 삭제 등을 포함한다.
 
step3, 수요가 왔습니다. 맵핑을 변경해야 합니다. 이 때 새로운 인덱스를 만들어야 합니다. 예를 들어 이름이 my_index_v2(버전 업그레이드).,이 인덱스에서 새 맵핑 구조를 만듭니다.그리고 새로운 데이터를 새로운 index에 칠합니다.데이터를 삭제하는 과정에서 오래된 index에서 데이터를 직접 꺼내서 형식을 바꾸면 된다고 생각할 수 있습니다.어떻게 모든 오래된 index 데이터를 두루 훑어보는지 참고하십시오.
step4, 동의어 수정.v1을 가리키는 동의어를 가리키는 v2로 수정합니다.http 인터페이스는 다음과 같습니다.
curl -XPOST localhost:9200/_aliases -d '
{
    "actions": [
        { "remove": {
            "alias": "my_index",
            "index": "my_index_v1"
        }},
        { "add": {
            "alias": "my_index",
            "index": "my_index_v2"
        }}
    ]
}
'

step5, 오래된 색인 삭제.
curl -XDELETE localhost:9200/my_index_v1

 
이외에 몇 가지 다른 방법도 맵핑을 변경할 수 있습니다.
1. 프로그램을 수정하고 필드를 추가합니다.
즉, 맵핑에 새로운 필드를 추가하고, 새로운 필드에 대한 접근 통계 검색을 할 수 있다는 것이다.이것은 두 곳을 수정해야 한다. 하나는 맵핑 추가 필드를 수정하는 것이다. 그리고 프로그램을 수정해서 필드를 새로운 필드로 바꾸는 것이다.
2. 필드 유형을 multi_로 변경field.
multi_field는 한 필드에 여러 개의 데이터 형식을 설정할 수 있습니다.multi_ 적용field의 가장 전형적인 장면은 하나의 형식은analyed로 정의되고 이 필드는 검색할 수 있으며 하나의 형식은 단어를 구분하지 않고 이 필드는 정렬에 사용됩니다.
모든 필드가 multi_로 업데이트될 수 있음field (object와nested 형식 제외).현재 created라는 필드가 있고 형식은string입니다.
{     "created": { "type": "string"} }

우리는 그것을 문자열과 날짜형으로 사용할 수 있는 유형을 추가할 수 있다.
curl -XPUT localhost:9200/my_index/my_type/_mapping -d '
{
    "my_type": {
        "properties": {
            "created": {
                "type":   "multi_field",
                "fields": {
                    "created": { "type": "string" },
                    "date":    { "type": "date"   }
                }
            }
        }
    }
}
'

 
표준적인 색인 재구성 방식을 사용할 때, 우리는 모든 type에 색인 동의어를 만드는 것을 추천합니다. 같은 색인 라이브러리에 있는 여러 type에도 동의어를 만들어서 방문하는 것을 추천합니다.즉, 하나의 index에는 하나의 type이 포함되어 있다.elasticsearch에서 크로스 index에서 데이터를 조회하는 것은 매우 편리하기 때문이다.이렇게 하면 우리는 reindex의 한 type 후에 즉시 type을 발효시킬 수 있다. index 아래의 모든 type을 재건한 후에야 동의어가 발효될 수 있다.
 
 
 
 
 
이런 화제에 흥미가 있습니까?메일 보내기 시작
[email protected]
나: 한단 사람, 자바, 자바스크립트, Extjs,oracle sql를 잘해요.
더 많은 나의 이전 문장, 나의 공간에 접근할 수 있다

좋은 웹페이지 즐겨찾기