2012-09-11 92 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