2013-02-21 62 views
0

我們有兩個站點,一個是在RoR中開發的,另一個是在Python(Django)中開發的。 MongoDB被用作網站的數據存儲。這些網站是基於登錄的。因此,用戶只能看到他們的數據,而不能看到其他用戶的數據。另外,MongoDB中有很多模型,這些模型之間是相互關聯的。數據庫上的抓取和索引

我們必須開發類似於Gmail搜索的搜索功能。在Gmail搜索框中,有許多字段用於過濾目的,如label:to:from:,attachment:等。如果沒有選擇這些字段,則正常搜索完成。令人驚訝的是,對於任何搜索查詢,Gmail搜索結果都以不到1秒的256 kbps帶寬速度獲取。

通過在所有模型中調用多個查詢來搜索關鍵字是不可行的。有關抓取數據庫數據的解決方案,可以查找Google搜索。

在「搜索引擎」上進行谷歌搜索時,出現了一個關於抓取和索引網頁的結果。可用的工具是Lucene Solr + Nutch和Sphinx。但它是用於抓取網頁並使用Nutch和索引關鍵字將關鍵字存儲到數據庫並使用Solr搜索它們。

使用「數據庫搜索引擎」搜索並沒有提供任何具體的結果。

在這個link,在第二點,有人說,MongoDB等似乎服務於沒有要求搜索和/或面的目的。那麼,這是否意味着對MongoDB的爬行和索引是不可行的?

從一般意義上說,不管數據庫工具如何(MySQL,SQLite,PostgreSQL,MongoDB等),是否有類似於數據庫的爬行和索引的東西?

更新:

我們開發很相似到Gmail,但它不是關於郵件服務的網站。我們只需要開發一個搜索功能。因此,Gmail用戶可以看到他們的郵件,而不是其他人的郵件。同樣,我們網站上的內容是特定於用戶的。希望它能夠澄清問題。

回答

1

根據我的理解,您並不需要一個網絡抓取工具,因爲您要索引文檔的文本而不是網頁,並且文檔對個人是私人的,所以您需要將文檔限制應用於搜索範圍。雖然你可以以某種安全的方式抓取它們(並由用戶組織),但它看起來非常低效且非常間接。

您需要提取數據並將其存儲在全文搜索索引系統中。雖然有些數據庫可能具有內置的全文搜索功能,但許多數據庫目前需要輔助系統,例如ElasticSearch或Lucene。 2.4版本的MongoDB計劃至少將全文搜索的預覽集成到數據庫中。

正如我所提到的一些數據庫已建成全文搜索。大多數人對搜索結果和性能的質量都有不同的評論。根據您的要求,您可能最好使用專用的可擴展全文搜索解決方案。

因此,當新數據進入您的系統時,您將在全文搜索系統中對其進行標記和索引。

跨數據庫系統不會有通用的索引系統。您需要將其連接起來以獲得最有效的搜索系統。無論如何,如果你手動這樣做,你會有更好的結果。