2012-09-11 2 views
1

에 인덱스에 설정됩니다내 Elasticsearch 지수가 나는 다음과 같은 코드가있는 올바른 설정 및 매핑이 있는지 확인하기 위해 Elasticsearch

if (client.admin().indices().prepareExists(Index).execute().actionGet().exists()) {    
    client.admin().indices().prepareClose(Index).execute().actionGet(); 
    client.admin().indices().prepareUpdateSettings(Index).setSettings(settings.string()).execute().actionGet(); 
    client.admin().indices().prepareOpen(Index).execute().actionGet(); 
    client.admin().indices().prepareDeleteMapping(Index).setType(Type).execute().actionGet(); 
    client.admin().indices().preparePutMapping(Index).setType(Type).setSource(mapping).execute().actionGet(); 
} else { 
    client.admin().indices().prepareCreate(Index).addMapping(Type, mapping).setSettings(settings).execute().actionGet(); 
} 

것 같다을 설정을 업데이트 할 바보 비트와 매핑이 이미 괜찮은 경우에도 마찬가지입니다. 나는 더 영리한 방법으로 물건을 어떻게 해야할지 모르겠다. 어떤 제안?

고마워,

스타 인

+0

색인을 만드는 동안 설정과 매핑을 한 번만 전달할 수는 없습니까? – javanna

+0

제 문제는 인덱스가 이미 생성되어 사용되고 있다는 것입니다. – Stine

답변

4

당신은 현재 설정 및 매핑을 검색하고 그들을 업데이트 할 시도하기 전에 올바른지 확인 할 수 있습니다.

ClusterStateResponse response = client.admin().cluster().prepareState()     
    .setFilterAll() 
    .setFilterMetaData(false) 
    .setFilterIndices(index) 
    .execute().actionGet(); 
IndexMetaData indexMetaData = response.state().metaData().index(index); 
Settings settings = indexMetaData.settings(); 
// Verify settings 
MappingMetaData mapping = indexMetaData.mappings().get(type); 
// Verify mapping