我有一個使用MVC模式開發的應用程序,我想現在索引它的多個模型,這意味着每個模型都有不同的數據結構。彈性搜索,多個索引與一個索引和不同數據集的類型?
使用多重索引,每個模型一個或每個模型的同一索引中有一個類型更好嗎?這兩種方式還需要我認爲不同的搜索查詢。我剛開始這個。
如果數據集很小或很大,兩個概念之間在性能上會有差異嗎?
如果有人能爲我推薦一些好的樣本數據,我會自己測試第二個問題。
我有一個使用MVC模式開發的應用程序,我想現在索引它的多個模型,這意味着每個模型都有不同的數據結構。彈性搜索,多個索引與一個索引和不同數據集的類型?
使用多重索引,每個模型一個或每個模型的同一索引中有一個類型更好嗎?這兩種方式還需要我認爲不同的搜索查詢。我剛開始這個。
如果數據集很小或很大,兩個概念之間在性能上會有差異嗎?
如果有人能爲我推薦一些好的樣本數據,我會自己測試第二個問題。
這兩種方法都有不同的含義。
假設您使用Elasticsearch的默認設置,每個模型有1個索引會顯着增加碎片的數量,因爲1個索引將使用5個碎片,5個數據模型將使用25個碎片;而1個索引中有5個對象類型仍然使用5個碎片。
啓示具有每個數據模式作爲索引:
啓示具有的每個數據模型作爲索引內的對象類型:
如果你問什麼是太多的數據與小數據?通常,這取決於處理器速度和硬件RAM,您在映射Elasticsearch中的每個變量中存儲的數據量以及查詢要求;在查詢中使用許多方面會顯着減慢響應時間。沒有直接的答案,你將不得不根據你的需求進行基準測試。
喬納森的回答很好。我只想添加其他幾點要考慮的:
什麼是指保留期?你是指生存時間領域?這是根據每個文檔設置的。 –
不,保留期限是指文檔/索引保留期 - 保存這些數據需要多長時間。 基於數據質量,規模,重要性 - 我用來指定不同的保留策略。有些數據/索引在7天后被刪除,其他數據/索引在6周後被刪除,有些在10年後被刪除... –
兩個以上的答案是偉大的!
我在索引中添加了幾個類型的示例。 假設您正在開發一個應用程序來搜索庫中的書籍。 有問到庫所有者幾個問題,
問題:
多少書,你打算存儲?
你要什麼樣的書在圖書館保存?
你將如何尋找書籍?
答案:
我打算存儲50K的 - 到爲70K書(大約)
我將有十五K -20 k科技公司相關的書籍(計算機科學,機械工程,化學工程等),歷史書籍15部,醫學書籍10部。以10K語言相關的書籍(英語,西班牙語等)
通過作者搜索第一名稱,作者姓名,出版年份,出版商的名稱。 (此爲您提供有關你應該在索引存儲什麼信息的想法)
從上面的答案,我們可以說,在我們的索引架構應該看起來有點像這樣。
//這是不準確的映射,只是爲了例如
"yearOfPublish":{
"type": "integer"
},
"author":{
"type": "object",
"properties": {
"firstName":{
"type": "string"
},
"lastName":{
"type": "string"
}
}
},
"publisherName":{
"type": "string"
}
}
爲了實現上述我們可以創建一個索引叫做書,可以有多種類型。
指數:圖書
類型:科學,藝術
(或者你可以創建多種類型,如科技,醫藥科學,歷史,語言,如果你有很多書)
重要這裏要注意的是模式是相似的,但數據並不相同。另一個重要的是您正在存儲的全部數據。
希望以上內容有助於何時查找索引中的不同類型,如果您有不同的模式,則應考慮使用不同的索引。小數據索引小。 :-)
雖然喬納森的回答是當時正確的大指數大數據的世界已經改變,現在看來,背後ElasticSearch的人有一個長期計劃放棄對多種類型的支持:
因此,對於新項目,僅使用每個索引的單一類型將使ElasticSearch 6.x的最終升級變得更容易。
如果沒有來自http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/mapping.html – AndreKR
的信息,這個答案是不完整的。謝謝! – Vinay
爲了增加優秀的答案,我引用了** ES 5.2 doc **,它解釋了爲什麼不推薦維護大量的分片:「默認情況下,elasticsearch會拒絕查詢超過1000個分片的搜索請求。原因是如此大量的碎片使得協調節點的工作非常耗費CPU和內存,通常情況下更好的辦法是組織數據以減少碎片的數量,如果你想繞過這個限制,不鼓勵,你可以更新action.search.shard_count.limit集羣設置爲一個更大的值。「」 – oblivion