如何在Elasticsearch中更改现有索引的设置和映射?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (90)

我希望在Elasticearch中已经存在的索引上设置以下设置和映射:

{
    "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

当索引关闭时,它不使用任何集群资源,但它既不可读也不可写。如果要使用JavaAPI关闭和重新打开索引,可以使用以下代码:

client.admin().indices().prepareClose(indexName).execute().actionGet();
//TODO update settings
client.admin().indices().prepareOpen(indexName).execute().actionGet();

热门问答

如何提高调用API网关、scf的请求内容长度限制?

Tina

腾讯云 · 产品经理 (已认证)

Go Serverless!
推荐
您好,当前SCF确实对于同步请求的事件大小,响应大小有相应的限制,最大为6MB。可以参考文档 https://cloud.tencent.com/document/product/583/11637 更多解决方案,欢迎您进入SCF用户q群一起讨论! 群号:537539545 sc...... 展开详请

cmq的实例是否支持调整写入频率?

是否有语音转发功能?

software微软、谷歌、腾讯、阿里、百度……
推荐已采纳
您好,核实下您咨询的是哪个端的问题,目前是没有语音转发功能的。这里提供下android端消息转发的示例参考: https://cloud.tencent.com/document/product/269/9232 image.png ... 展开详请

信令包里面的公网地址为什么都被改成内网地址了?

您描述的原因是云服务器内网ip地址与公网ip地址是一对一映射,故云服务器内显示的是内网ip地址。 如您需要网卡设置公网ip地址,建议您参考下方文档eip直通(已为您开通白名单) EIP 直通:https://cloud.tencent.com/document/product/2...... 展开详请

腾讯云短信SDK有没有支持NETFramework4.5.1的????

您好,可使用腾讯云短信C# SDK,github:https://github.com/qcloudsms/qcloudsms_csharp,感谢您对腾讯云短信的支持。

压力测试无法添加https域名?

所属标签

扫码关注云+社区

领取腾讯云代金券