2016-09-03 34 views
-1

我正在研究利用elasticsearch處理大量數據存儲和搜索功能的大數據項目。更具體地說,我們使用Java API來執行很多索引和搜索操作。應用程序的設計方式之一就是,當應用程序「活躍」時,可以對彈性搜索集羣進行檢查,確保所有索引都存在,如果不存在,它們是使用配置文件中定義的設置/映射創建。Elasticsearch編程配置

我認爲這是一種糟糕的做法,我想知道我的想法/方法是否正確。我看到索引和所有類型映射的實際創建與您將如何在關係數據庫世界中執行表創建和設置約束類似,而不是傳統上以編程方式完成的事情。我知道你不必爲事先要保存的類型明確地設置映射,因爲elasticsearch會給它映射的最佳猜測,但是我認爲你會想要做所有的索引和映射事先設置,並且沒有任何在代碼中完成的映射和索引初始化。思考?我還沒有和ES一起工作很長時間,仍然在學習,但這看起來對我來說似乎沒有意義。

回答

0

通常計劃您的映射類型是明智的,因爲在存儲數據(不重新索引所有數據)後無法更改映射字段的類型。如果您有需要完全匹配的文本字段,則這是一個特殊問題。默認情況下,elasticsearch將通過分析這些字符串來索引字符串字段,並將它們分解爲可以通過模糊搜索輕鬆匹配的結構。但是這意味着通常不可能完全匹配該字符串。

例如,如果您的映射包含一個包含電子郵件地址的字段,則默認情況下會在其存儲時進行分析。這可以通過映射類型設置爲以下改變:

{ 
    "type":"string", 
    "index":"not_analyzed" 
} 

這裏最重要的是,如果不設置此啓動存儲在其數據之前,那麼你不能改變它。