2

如果多個類型在Elasticsearch指數具有相同名稱字段,這些字段必須有一個嘗試創建一個「foobar的」屬性作爲字符串和長」相同的映射......爲什麼在Elasticsearch中按字段而不是索引指定字段?

例如,如果你嘗試把下面的索引映射:

{ 
    "mappings": { 
    "type_one": { 
     "properties": { 
     "foobar": { 
      "type": "string" 
     } 
     } 
    }, 
    "type_two": { 
     "properties": { 
     "foobar": { 
      "type": "long" 
     } 
     } 
    } 
    } 
} 

...以下錯誤將返回

{ 
    "error": { 
    "root_cause": [ 
     { 
     "type": "mapper_parsing_exception", 
     "reason": "Failed to parse mapping [type_one]: mapper [foobar] cannot be changed from type [long] to [string]" 
     } 
    ], 
    "type": "mapper_parsing_exception", 
    "reason": "Failed to parse mapping [type_one]: mapper [foobar] cannot be changed from type [long] to [string]", 
    "caused_by": { 
     "type": "illegal_argument_exception", 
     "reason": "mapper [foobar] cannot be changed from type [long] to [string]" 
    } 
    }, 
    "status": 400 
} 

以下是來自現場elasticsearch:

Conflicts between fields in different types

字段在兩種不同類型的 具有相同名稱相同的索引必須具有相同的映射,因爲它們是由相同的字段 支持內部。嘗試更新 存在於多個類型中的字段的映射參數將引發異常,除非 指定了update_all_types參數,在這種情況下,它將更新 該參數跨同一索引中具有相同名稱的所有字段。

如果具有相同名稱的字段必須對索引中的所有類型具有相同的映射,那麼爲什麼每個類型都指定了字段映射?爲什麼不指定整個索引的字段,然後確定將哪些字段分配給每種類型。

例如是這樣的:

{ 
    "fields":{ 
     "PropA":{ 
     "type":"string" 
     }, 
     "PropB":{ 
     "type":"long" 
     }, 
     "PropC":{ 
     "type":"boolean" 
     } 
    }, 
    "types":{ 
     "foo":[ 
     "PropA", 
     "PropB" 
     ], 
     "foo":[ 
     "PropA", 
     "PropC" 
     ], 
     "foo":[ 
     "PropA", 
     "PropC", 
     "PropC" 
     ] 
    } 
} 

不喜歡這樣的映射格式更加簡潔,而且什麼是真正允許更好的表現?

我問的原因是因爲我正在創建一個索引模板JSON文件,其中包含大約80個用於15種類型的不同字段。如果不是所有類型,許多字段都用於多個字段。因此,無論何時我需要更新一個字段,我都必須確保每一個字段都使用它來更新它。

回答

相關問題