2016-09-14 74 views
1

我有一個與我的MongoDB查詢問題,我需要在我的領域內搜索,只從單詞的開始搜索不是100%匹配的單詞。MongoDB全文搜索取詞開始

之前這個問題打我,我用$regex和這裏它沒有問題,唯一的問題是它的很多慢,然後$text搜索,所以現在我希望有一個可以幫助我。

這是我的查詢今天

db.getCollection('product').aggregate([ 
    {$match : {$text: { $search : "\"samsung\" \"evo\" } } }, 
    {$project: { _id: 0, Category: 1 } }, 
    {$unwind: "$Category" }, 
    {$group: { _id: '$Category', count: { $sum: 1 } } }, 
    {$project: { _id: 0,Category: "$_id", count: 1 } }, 
    {$sort: { 'count': -1 } }, 
    {$limit: 5} 
]) 

,我有我嘗試過,說我之前已經使用$正則表達式,但在這裏它無法用任何一種指標,然後在MongoDB的查詢是如此緩慢,什麼每個查詢都會有0.4秒和0.03秒之間的差異。

所以如果有一個可以向我解釋最新情況以及解決方案是什麼以及爲什麼它會幫助我很多。

現在它的「匹配100%三星和evo」這個詞我想要的是我可以鍵入像山姆和evo然後它找到一切有evo並開始與山姆它將使搜索更快的用戶。

感謝您的幫助。

回答

1

Regex或正則表達式總是比文本搜索慢。這種可能的解決方案是:

  • 當插入文檔,添加另一個field而將其歸類文檔(這是更相關的數據庫設計)。這將允許使用text輕鬆搜索。
  • 切換到elasticsearch(不一定是可行的,取決於你的項目的階段)
+0

如何使用elasticsearch在MongoDB中?它的聲音很有趣。 – ParisNakitaKejser

+0

@ParisNakitaKejser'Elasticsearch'是一個搜索引擎文檔商店,您不會在*'MongoDB'中使用*。檢查這個[頁面](https://www.elastic.co/products/elasticsearch)。此外[wiki](https://en.wikipedia.org/wiki/Elasticsearch)。 –