0

我是 Lucene 的新手,并试图用它来搜索由 SystemA 生成的日志文件/条目。

建筑学

  1. 接收输入目录中的每个日志条目(即 XML)。SystemA 将日志条目发送到一个 MQ 队列,该队列由一个小实用程序轮询,该实用程序选择消息并在 INPUT 目录中创建一个文件。

  2. WriteIndex.java(即IndexWriter/Lucene)不断检查INPUT 目录中是否收到新文件。如果是,则获取文件,放入索引并将文件移动到 OUTPUT 目录。作为索引的一部分,我将文件名、路径、时间戳、内容放入索引中。“注意:我正在为内容创建索引,并将整个内容作为字符串字段。”

  3. SearchIndex.java(即 SeacherManager/Lucene/refereshIfChanged)被创建。作为创建的一部分,我也开始了一个新线程,如果索引没有更改,则每 1 分钟检查一次。我为每个请求获取 IndexSearcher。它工作正常。

到目前为止一切都很好。但是我不确定在生产中会发生什么,因为我已经对几百个文件进行了测试,但是在生产中,我每天将获得大约 500K 的日志条目,这意味着 500K 的小文件,每个文件都有一个 XML。每当收到新文件时,“WriteIndex.java”必须不停地运行以更新索引。

我有以下问题

  1. 有人做过类似的工作吗?我应该遵循的任何问题/最佳实践。

  2. 您是否看到为如此大量的 xml 文件生成的索引文件有任何问题。每个 XML 文件最大为 2KB。请记住,我正在对内容进行索引,并将内容作为字符串放入索引中,这样每当我在搜索时发现索引匹配时,我就可以从索引中检索。

  3. 我会将 SearchIndex.java 公开为 Servlet,以允许管理员访问网页并搜索日志条目。你看到它有什么问题吗?

如果有人需要任何具体的东西,请告诉我。

谢谢,罗希特戈亚尔

4

1 回答 1

0

建筑看起来不错。

一些事情

  • 考虑使用 TextField 而不是 StringField。TextField 将被标记化,因此用户将能够搜索标记。StringField 未标记化,因此对于匹配搜索的文档,全文应该匹配。
  • lucene 的性能没有问题。查看 Lucene 性能图表。Lucene 可以在几分钟内为超过十亿个维基百科文档生成索引。搜索也很快。
于 2013-10-08T10:56:43.530 回答