2016-09-21 124 views
1

嗨,我有一個全文搜索的大問題,我有一個包含1000萬個文件的集合,這些文檔在索引字段中有很多常見詞彙:例如:what,as,like,how,嗨,你好等MongoDB全文搜索常用詞

當我做一個單詞「嗨」的搜索結果搜索變得超慢,大約需要30分鐘搜索結果,另一方面,當我做同樣的事情,但與一個罕見的單詞搜索速度超快,並且需要不到30毫秒。 我不知道可能是什麼問題。

我的文本索引:

db.themes.createIndex({"theme":"text"}) 

和我運行查詢:

db.themes.find({$text: {$search: "hi"}}, {score: {$meta: "textScore"}}).sort({score:{$meta:"textScore"}}).limit(20) 
+0

有沒有辦法預先限制您要搜索的文件數量?看到這裏:https://docs.mongodb.com/manual/tutorial/limit-number-of-items-scanned-for-text-search/ – dyouberg

回答

0

那麼這是怎麼回事。儘管mongodb提供了全文功能,但其性能與流行的文本搜索引擎並不相同。

你可能會發現在互聯網上,大多數實現有彈性搜索與MongoDB一起實現搜索優化。您可以爲您的操作使用彈性搜索或Solr。

0

對於大型集合,MongoDB的文本搜索速度非常慢。我也不喜歡它自動認爲「詹姆斯邦德」是OR的方式,但這是另一回事......(對於AND而言,需要搜索「James」「Bond」最好)。

如果您的應用程序允許,繞過它的一種方法是通過在其他字段上篩選來獲得Limit the Number of Entries Scanned。爲此,它需要是一個平等,它不能是$ gt或這樣的。你可能必須有創意才能解決這個問題......我把我的城市分爲「大都市區」(這需要一段時間......),現在我可以通過{metro:「DC」,{$ text: {$ search:「pizza」}}。