ElasticSearch的重新索引(reindex)API允许您将文档从一个索引复制到另一个索引,同时可以应用转换。当您需要更改映射或分片设置时,这非常有用。
当使用重新索引API时,新字段未被分析(analyzed),这通常是因为目标索引的映射设置与新字段不匹配,或者重新索引过程中未正确处理字段的分析器。
在重新索引前,明确创建目标索引并定义所有字段的映射:
PUT /new_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "stop"]
}
}
}
},
"mappings": {
"properties": {
"new_field": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
确保使用正确的重新索引API并包含必要的映射:
POST _reindex
{
"source": {
"index": "old_index"
},
"dest": {
"index": "new_index"
}
}
如果字段是动态的,可以使用动态模板:
PUT /new_index
{
"mappings": {
"dynamic_templates": [
{
"strings_as_text": {
"match_mapping_type": "string",
"mapping": {
"type": "text",
"analyzer": "standard"
}
}
}
]
}
}
如果已经重新索引但字段未被分析,可以尝试更新映射:
PUT /new_index/_mapping
{
"properties": {
"new_field": {
"type": "text",
"analyzer": "standard"
}
}
}
注意:这将不会影响已索引的文档,需要再次重新索引。
对于生产环境,建议使用别名:
POST _aliases
{
"actions": [
{
"add": {
"index": "new_index",
"alias": "current_index"
}
}
]
}
重新索引API常用于以下场景:
通过以上方法,您可以确保重新索引过程中新字段被正确分析。
没有搜到相关的文章