2014-01-26 170 views
4

我正在尋找有關ElasticSearch中字段名稱區分大小寫的建議和最佳做法,以及是否存在使字段名不區分大小寫的全局配置。 另外,如果可以禁止ES添加不同的字段(如果它不存在於映射中)。Elasticsearch字段名稱區分大小寫

這裏是一個例子來說明這一點;

1-小寫

curl -XPUT http://localhost:9200/twitter/user/_mapping -d '{ 
     "user" : { 
      "properties" : { 
      "name" : { "type" : "string" } 
     } 
    } 
}' 

2-索引創建包含一個字段 「名稱」 映射的文檔時,使用不同的情況下,用於名稱字段(NAME)

curl -POST http://localhost:9200/twitter/user/1 -d '{ 
    "NAME" : "Yasir" 
}' 

在Elasticsearch日誌,我注意到映射更新了。

[2014-01-26 20:58:19,074][INFO ][cluster.metadata   ] [Mad-Dog] [twitter] update_mapping [user] (dynamic) 

3-檢查映射,你會發現一個新的領域已經被添加「NAME」

curl -XGET http://localhost:9200/twitter/user/_mapping?pretty 

{ 
    "user" : { 
    "properties" : { 
     "NAME" : { 
     "type" : "string" 
     }, 
     "name" : { 
     "type" : "string" 
     } 
    } 
    } 
} 

感謝 亞西爾

回答

3

可確定停用的自動創建的映射配置,如提到in the documentation

只需將action.auto_create_index設置爲false即可。

字段名稱不能區分大小寫,因爲命名屬於您。我建議只使用小寫字母。但是,您可以在不區分大小寫的情況下搜索您的值。

編輯:

像@ javanna的評論說,這不會禁用dynamic mapping。 因此,您必須將index.mapper.dynamic設置爲false

因此,未聲明的字段將被忽略。 如果您希望elasticsearch改爲拋出錯誤,則必須將其設置爲strict

+2

當您在非現有字段下爲第一個文檔建立索引時,您建議禁用創建新索引。如果你想禁用動態映射,以便映射不是自動創建的(但你必須預先定義模式),你可以將'index.mapper.dynamic'設置爲'false'。結果,未聲明的字段將被忽略。如果你想彈性搜索拋出一個錯誤,把它設置爲'strict'。 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-dynamic-mapping.html – javanna

+0

Thx,不知道! –

+0

不客氣,也許你可以相應地修改你的答案,因爲它不完全正確? ;) – javanna

相關問題