簡體   English   中英

如何編寫PHP搜索引擎以搜索多個sqlite數據庫

[英]How to code PHP search engine for searching through multiple sqlite databases

我打算用PHP編寫一個搜索引擎,允許我公司搜索多個項目中包含的文本,每個項目都包含在一個獨特的sqlite數據庫文件中。

因為在某些時候會有超過100個項目(超過100個sqlite數據庫),我想知道以下哪個(如果有的話)將是一個更聰明的編程選擇:

  1. 在初始頁面加載期間,遍歷所有數據庫並讀入每個數據庫的所有內容,將我們想要搜索的所有內容插入到PHP對象/數組/中。 然后用戶輸入搜索短語,我們只搜索PHP對象?
  2. 在用戶點擊“搜索”時,每次搜索一個數據庫以找到他們感興趣的內容。

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

非常感謝!

我沒有做過類似的事情,但在你的情況下,我可能會創建一個包含其他數據庫內容的數據庫,如果數據非常動態,那么除非你運行腳本並復制數據,否則這個選項不起作用像每個午夜或每周或任何其他的cronjob。 此外,如果數據庫是相似的 - 我的意思是他們有類似的結構(由於搜索會有意義),那么我可能會使用上面的建議。 如果不知道數據庫有多復雜,很難說清楚。

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

此外,它取決於您設置的索引類型。 如果數據庫具有全文索引,則100個文本搜索可以非常快。

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

另一種可能性是創建一個本地數據庫,其中包含所有可搜索數據和與可以找到原始數據的sqlite文件相關的額外元數據,以及檢查它們的最后時間戳。 然后在每個請求中,您可以檢查sqlite文件的最后修改時間戳,並將修改后的SQlite DB中的任何新數據復制到本地數據庫,更新時間戳,並在本地數據庫中搜索。 在這種情況下的性能將取決於SQlite文件的更新頻率以及如何同步mutch數據,但我相信在您的情況下它就足夠了。

我絕對不會閱讀所有內容,然后通過php搜索,這是非常低效的。 創建一些非常有效的查詢然后在有用戶查詢后在所有數據庫上運行它們會更有效。 如果您能設法通知用戶您的搜索狀態非常有幫助。 即提供您當前正在搜索的數據庫以及剩余數量

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

一個簡單的單詞索引就可以了

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

如在,文件1中出現“foo”一詞,3次,文件4次,5次。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM