以下是我遇到的問題,我有一組日誌可以相當快速地增長。它們每天都被分割成單獨的文件,並且這些文件可以輕鬆地成長爲一個演出。爲了減小尺寸,超過30天左右的條目被清除。通過日誌進行快速文本搜索
問題是當我想要搜索某些字符串的這些文件。現在,Boyer-Moore的搜索速度非常緩慢。我知道像dtSearch這樣的應用程序可以使用索引提供非常快速的搜索,但我不確定如何實現該功能,而不佔用日誌佔用空間的兩倍。
有沒有任何資源可以幫我查看?我真的在尋找一種標準的算法來解釋我應該如何構建索引並使用它來進行搜索。
編輯:
由於此搜索需要集成到跨平臺應用程序中,因此Grep不起作用。我無法擺動任何外部程序。
它的工作方式是有一個Web前端具有日誌瀏覽器。這涉及到一個自定義的C++ Web服務器後端。該服務器需要在合理的時間內搜索日誌。目前通過幾個日誌搜索需要時間。
編輯2: 其中一些建議很好,但我必須重申,我無法整合其他應用程序,這是合同的一部分。但是要回答一些問題,日誌中的數據會因接收到的醫療保健特定格式的消息或與這些消息相關的消息而有所不同。我期望依靠索引,因爲雖然重建索引可能需要一分鐘時間,但搜索目前需要很長時間(我已經看到這需要長達2.5分鐘)。而且,甚至在記錄之前,很多數據都被丟棄。除非打開某些調試日誌記錄選項,否則超過一半的日誌消息將被忽略。
搜索基本上是這樣的:網頁表單上的用戶會看到最近消息的列表(當他們滾動時從磁盤進行流式傳輸,對於ajax而言是流式傳輸),通常他們需要搜索消息在其中包含一些信息,可能是患者ID或他們發送的一些字符串,因此他們可以將字符串輸入到搜索中。搜索以異步方式發送,自定義Web服務器每次線性搜索日誌1MB以獲得一些結果。當日志變大時,此過程可能需要很長時間。這正是我想要優化的。
嘗試使用grep作爲外部工具,如果其足夠快,您可以使用gnu grep源代碼並將其直接集成到您的應用程序中。 – gbjbaanb 2008-10-02 18:44:19
我想要,但如果將其包含在內,這是一個法律問題,我問過要走這條路。 – ReaperUnreal 2008-10-02 19:37:42