更改Elasticsearch中现有索引的设置和映射

我想要对Elasticsearch中已存在的索引进行以下设置和映射设置:

{

"analysis": {

"analyzer": {

"dot-analyzer": {

"type": "custom",

"tokenizer": "dot-tokenizer"

}

},

"tokenizer": {

"dot-tokenizer": {

"type": "path_hierarchy",

"delimiter": "."

}

}

}

}

{

"doc": {

"properties": {

"location": {

"type": "string",

"index_analyzer": "dot-analyzer",

"search_analyzer": "keyword"

}

}

}

}

我试图添加以下两行代码:

client.admin().indices().prepareUpdateSettings(Index).setSettings(settings).execute().actionGet();

client.admin().indices().preparePutMapping(Index).setType(Type).setSource(mapping).execute().actionGet();

但这是结果:

org.elasticsearch.index.mapper.MapperParsingException: Analyzer [dot-analyzer] not found for field [location]

任何人?非常感谢,

斯汀


这似乎可行:

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();

}

回答:

如果在发送更改后查看设置,您会发现分析仪不存在。实际上,您不能在实时索引上更改设置的“分析”部分。最好使用所需的设置来创建它,否则您可以将其关闭:

curl -XPOST localhost:9200/index_name/_close

关闭索引后,您可以发送新设置。之后,您可以重新打开索引:

curl -XPOST localhost:9200/index_name/_open

关闭索引后,它不会使用任何群集资源,但是它既不可读也不可写。如果要使用Java API关闭并重新打开索引,可以使用以下代码:

client.admin().indices().prepareClose(indexName).execute().actionGet();

//TODO update settings

client.admin().indices().prepareOpen(indexName).execute().actionGet();

以上是 更改Elasticsearch中现有索引的设置和映射 的全部内容, 来源链接: utcz.com/qa/428274.html

回到顶部