【问题标题】:Suggestion around Lucene 4.4 (Log Search)关于 Lucene 4.4 的建议(日志搜索)
【发布时间】:2013-10-08 05:42:50
【问题描述】:

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

架构

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

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

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

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

我有以下问题

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

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

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

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

谢谢, 罗希特·戈亚尔

【问题讨论】:

  • 这里一题三题复杂。很难为这样的事情写一个有用的答案。
  • 如果您需要,我可以分享更多信息。
  • 我正在寻找的用于合并段的代码之一。每次添加和索引新文件时,我都可以看到在索引目录中创建了段和其他文件。我可以以某种方式合并这些段吗?

标签: lucene


【解决方案1】:

架构看起来不错。

几件事

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

【讨论】:

  • 你能链接到你所指的性能信息吗?听起来每微秒大约有 2 个文档写入索引,平均英文维基百科文章大小为 3.5KB,维基百科到 lucene 的整体传输速率约为 6.7 GB/秒,这确实令人印象深刻。我想了解更多。
  • 我将内容添加为 TextField 和 StringField。 TextField 有助于对 XML 内容进行索引,而 StringField 有助于在需要时查找整个内容。
猜你喜欢
  • 2013-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 2020-10-06
相关资源
最近更新 更多