2013-04-29 57 views
0

我在集合中的每個文檔中都有一個關鍵字數組。在MongoDB中搜索關鍵字

此嵌入式數組在每個文檔中最多可容納15個字。

該集合有數百萬個文檔。

用戶將只能點擊一個關鍵字才能獲得具有相同關鍵字的前20個文檔。

我應該只在該字段上創建一個muli-key索引或使用Lucene索引該關鍵字字段?

MongoDB關鍵字搜索在數組索引上的性能如何?

這似乎是很自然的選擇,因爲Lucene/Solr似乎矯枉過正。

在我選擇之前對此有何評論?

+2

我認爲你需要測試它來找出最適合你需求的東西。 – WiredPrairie 2013-04-29 22:24:00

回答

0

您可以將memcache添加到您的服務器端代碼,因爲您似乎要做的是做大量的讀取。當然,當你將信息存儲在內存中時,這當然會吃很多RAM,但是當它訪問一個哈希數組時,它的檢索速度會超級超快:>

你確實說了數百萬,這可能會吃幾個數百個megs:|取決於文件本身。

您可能需要一些邏輯來處理「查詢」,因爲您現在應該具有不同的結構。

的1..15話那陣列將不得不轉向從:

Doc 1: {_id:123, keys:[ key0, key1...keyN]} 
Doc 2: {_id:456, keys:[ key0, key1...keyM]} 

Memcache = []; 
Memcache[ key0 ] = [ Doc 1, Doc 2 ]; 
Memcache[ key1 ] = [ Doc 1, Doc 2 ]; 
... 
Memcache[ keyN ] = [ Doc 1 ]; 
... 
Memcache[ keyM ] = [ Doc 2 ]; 

所以,當你搜索的keyZ第20個文檔,你只是做內存緩存[keyZ ]並將結果限制爲20,我預計數百/數千Doc。