以下是我遇到的问题,我有一组日志可以相当快速地增长。它们每天都被分割成单独的文件,并且这些文件可以轻松地成长为一个演出。为了减小尺寸,超过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