2012-09-24 40 views
2

我想知道是否有數千個不同的索引是一個壞主意?ElasticSearch單獨索引每個用戶

我正在將搜索頁面添加到基於ElasticSearch的Web應用程序中。搜索頁面允許用戶通過篩選多個不同的索引標準(名稱,位置,性別等)來搜索網站上的其他用戶。這是非常簡單的,只需要一個包含文檔中每個用戶的文檔的索引。

但是,我還想創建一個頁面,用戶可以在其中看到他們關注的所有其他用戶的列表。我希望此頁面具有與搜索頁面上可用的相同的過濾選項。我想知道是否有一個好方法可以爲每個用戶創建一個單獨的索引,其中包含他們關注的每個用戶的文檔。

回答

5

雖然你當然可以在elasticsearch中創建數千個索引,但在你的用例中我並不真正看到它的需要。我認爲你可以使用一個索引。只需爲主要用戶記錄創建一個額外的child typefollowers。每當用戶A跟隨用戶B時,創建B的子記錄以及以下內容:{"followed_by" : "A"}。要獲取當前用戶所關注的用戶列表,您可以簡單地將Has Child Filter添加到您的查詢中。

5

我想添加到伊戈爾的答案,在一個小羣集(一個或兩個節點)上創建數千個索引可能會導致一些缺陷。 索引的每個分片都是完整的Lucene實例。也就是說,如果您擁有單個節點(或小型集羣 - 就節點而言),您將擁有許多已打開的文件(可能打開的文件太多)。

這就是爲什麼我不會定義了太多的指數的重要原因之一...

File descriptors on installation guide

+2

優秀點見!如果David還沒有說服你,我還可以補充說,有很多索引會減慢集羣的重新啓動速度,重複用戶數據會使修改和刪除用戶記錄更加複雜。換句話說,你可以有很多索引,但就你而言,這可能是一個壞主意。 – imotov