在数千个 xml 文件中搜索

本文关键字:xml 文件 搜索 千个 | 更新日期: 2023-09-27 18:30:37

我有大约 50000 个 XML 文件,每个文件的大小为 50KB。我想在这些文件中搜索数据,但到目前为止我的解决方案非常慢。有什么方法可以提高搜索性能吗?

在数千个 xml 文件中搜索

您可以使用

Lucene.NET,这是一个轻量级,快速,平面的文件搜索索引引擎。

有关入门教程,请参阅 http://codeclimber.net.nz/archive/2009/09/02/lucene.net-your-first-application.aspx。

您始终可以将文件内容索引到数据库并在那里执行搜索。数据库在搜索方面非常高性能。

我假设您使用的是Windows,您可以使用Windows桌面搜索来快速搜索文件。您将使用Windows索引,该索引将在文件更改时更新。此处提供了可从 .NET 使用的 SDK

很大程度上

取决于这些XML文件的性质。 它们只是 50,000 个不会重新生成的 XML 文件吗? 还是它们在不断变化? XML 文件中是否只有某些元素要编制索引以进行搜索?

当然,打开 50k 文件句柄、读取其内容和搜索文本会非常慢。 我同意 Pavel 的观点,将数据放入数据库中会产生很多性能,但是如果您的 XML 文件经常更改,则必须有某种方法来使它们与数据库同步。

如果您想推出自己的解决方案,我建议您扫描所有文件并创建单词索引。 如果您的文件经常更改,您还需要跟踪"上次修改"日期,如果文件更改的时间比该日期更近,请更新索引。 这样,您将拥有一个巨大的单词索引,如果搜索的是"foo",索引将显示该单词可以在文件file39209.xml,file57209和file01009.xml中找到。 根据 XML 的性质,您甚至可以将元素存储在索引文件中(本质上,这就像将所有 XML 文件平展为一个)。

您可以启动一个 Splunk 实例并让它为您的文件编制索引。 它主要作为日志解析器计费,但仍能满足您的需求。 它将文件标记为单词,为这些单词编制索引,并提供基于 Web 和基于 CLI 的搜索工具,该工具支持复杂的搜索条件。

使用 XML 数据库。通常的建议是eXist,如果你想要开源,MarkLogic,如果你想要商业的东西,但如果Microsoft对你很重要,并且你不想要最终的XML功能,你可以使用SQL Server。如果你想评估它们,还有很多其他的。所有数据库产品都有陡峭的学习曲线,但对于这些数据量,这是正确的解决方案。