Elasticsearch创建索引后如何为字段配置小写分析器?
问题解答
不能直接更新已存在索引的分析器设置——分析器决定了文档的分词逻辑,修改后会导致已有文档的分词结果和新文档不兼容,彻底破坏搜索一致性。
解决步骤如下:
- 创建带有目标分析器和完整映射的新索引
PUT /vehicles_new { "settings": { "analysis": { "analyzer": { "my_lowercase_analyzer": { "tokenizer": "standard", "filter": [ "lowercase" ] } } } }, "mappings": { "properties": { "make": { "type": "text", "analyzer": "my_lowercase_analyzer" }, "color": {"type": "keyword"}, "from": {"type": "keyword"}, "size": {"type": "keyword"}, "HP": {"type": "integer"}, "milage": {"type": "integer"}, "price": {"type": "float"} } } }
- 将旧索引的数据迁移到新索引
POST _reindex { "source": { "index": "vehicles" }, "dest": { "index": "vehicles_new" } }
- (可选)用别名实现应用无缝切换
先给新索引绑定原有索引的别名,同时解绑旧索引:
POST /_aliases { "actions": [ {"remove": {"index": "vehicles", "alias": "vehicles"}}, {"add": {"index": "vehicles_new", "alias": "vehicles"}} ] }
之后应用可以继续用vehicles别名访问,无需修改代码。
迁移完成后,若无需保留旧索引,可执行删除:
DELETE /vehicles
内容的提问来源于stack exchange,提问作者william007
相关产品推荐
相关产品推荐

