2011-12-08 61 views
0

我打算代碼PHP搜索引擎,讓我的公司來搜索包含在一個獨特的SQLite數據庫文件中的每個項目包含在多個項目中的文本,搜索。如何編寫PHP搜索引擎通過多個SQLite數據庫

由於在某些時候會有超過100個項目(超過100 SQLite數據庫),我想知道它(如果有的話)以下將是一個更明智的節目選擇的:

  1. 在初始頁面加載,遍歷所有數據庫並從每個數據庫中讀取所有內容,將我們想要搜索的所有內容插入到PHP對象/數組/任何內容中。然後用戶鍵入搜索短語,我們只需搜索PHP對象?
  2. 當用戶點擊「搜索」每個數據庫中搜索一個在同一時間找到他們感興趣的內容。

我真的不知道這需要多長時間做任何一種選擇,或者哪種更好的做法。大多數數據庫文件是1GB的<。

非常感謝!

回答

1

首先:不要忘了,除非你正在開發的如PHP-GTK一些圖形應用程序,PHP pageloads是無狀態的。這意味着如果您選擇了選項1,則需要將數據緩存在某處(例如,不同的數據庫)。無論如何,我都不會記住它。

而且,它取決於你設置什麼樣的指標了。如果數據庫具有全文索引,則100個文本搜索可以非常快速。

因此,循環瀏覽文件是一個選項。由於必須打開100個不同的SQLite文件,可能會有一些開銷。在完成它之後,您也不應該忘記關閉每個文件以減少內存使用量。您需要確保所有SQlite數據庫都已正確編入索引。

另一種可能性是創建一個本地數據庫與所有的搜索數據,並與其中的SQLite文件中的原始數據可以發現額外的元數據,並且他們檢查了最後的時間戳。然後在每個請求上,您可以檢查sqlite文件的上次修改時間戳,並將修改後的SQlite數據庫中的任何新數據複製到本地數據庫,更新時間戳並在本地數據庫中進行搜索。 這種情況下的性能將取決於SQlite文件更新的頻率以及mutch數據如何同步,但我相信在您的情況下就足夠了。

+0

我看到了,我可以使用JavaScript來存儲數據?希望這些數據庫具有全文索引,Trac(實際寫入這些數據庫的軟件)具有非常快速的搜索功能,所以我認爲它們是。感謝您的建議! – gamemusicmaker

0

我絕對不會讀取所有的內容,然後搜索,通過PHP中,這是非常低效的。創建一些真正有效的查詢並在用戶查詢後在所有數據庫上運行它們會更有效率。如果您可以設法通知用戶您的搜索狀態將會非常有幫助。即提供DB您正在搜索和多少仍然

+0

我認爲它可能有用的唯一原因是即時搜索,如Google的新即時搜索功能,但對我的目的來說這可能是不必要的。 – gamemusicmaker

+0

如果你真的想走的路線比你真的需要一個完全成熟的webbapp有一個在內存中的上下文... –

1

我沒有做過這樣的事情,但你的情況我可能會創建一個數據庫,其中將包括其他數據庫的內容,如果數據是相當動態那麼這個選項將不起作用,除非你運行腳本並且像每個午夜或者每週或者其他一樣用cronjob複製數據。 此外,如果數據庫是相似的 - 我的意思是他們有一個類似的結構(這將有意義,因爲搜索),那麼我可能會使用我的建議上面。 不知道數據庫有多複雜,很難說清楚。

+0

我正在編寫這個搜索引擎圍繞現有的錯誤跟蹤維基系統(Trac),它使用一個單獨的數據庫每個項目,所以我堅持這一點。我不認爲數據庫是超級複雜的。 – gamemusicmaker

+0

我認爲建立一個新的數據庫並在每個時間段內填充它將是您的最佳選擇。那麼這就是我會做:) – Ignas

+0

到目前爲止,似乎是最好的解決方案,謝謝;-) – gamemusicmaker

0

創建的所有數據庫的索引,並定期更新。因爲這是隻讀的,它不應該是一個大問題。

一個簡單的字索引可以只是

word[ [document,occurrences], [document,occurrences] ... ] 

如, 「foo」 的出現在文獻1,3倍,文獻4,5次的單詞。

foo[ [1,3] , [4,5] ] 

這不會讓你做精確的短語搜索,但它很簡單,快速。