2012-04-11 68 views
2

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

+0

有没有将数据移入数据库的机会?如果没有,你可以建立某种索引,查询速度会更快吗? – 2012-04-11 04:44:43

+0

您是否添加了需要搜索的新文件?搜索的原因是什么(只是高层次...总是需要提取客户信息等)。可能有助于评估。如上所述,Lucene,加载到数据库等可能会有所帮助,但可能不适合您的预期结果 – scarpacci 2012-04-11 04:59:46

回答

1

您可以随时将文件的内容编入数据库并在其中执行搜索。数据库在搜索方面非常好用。

6

您可以使用Lucene.NET这一轻量级快速平面文件搜索索引引擎。

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

+0

Lucene是为这样的东西做的。人们总是想诉诸于数据库,但全文索引几乎肯定是提问者真正需要的。 – Chris 2012-04-11 05:05:51

+0

这取决于他们正在寻找什么。如果你在文本中搜索单词,Lucene很好。如果你想知道乌拉圭西红柿的平均价格,一个自由文本系统不会告诉你。 – 2012-04-11 08:23:42

0

很大程度上取决于这些XML文件的性质。他们只是5万个不会重新生成的XML文件吗?或者他们在不断变化?您想要索引的XML文件中是否只有某些元素用于搜索?

当然,打开50k文件句柄,阅读它们的内容和搜索文本将会非常缓慢。我同意Pavel的观点,把数据放到数据库中会产生很多性能,但是如果你的XML文件经常变化,你必须有一些方法来保持它们与数据库的同步。

如果您想推出自己的解决方案,我建议扫描所有文件并创建一个字索引。如果您的文件频繁更改,您还需要跟踪“上次修改日期”,并且如果文件最近发生更改,请更新您的索引。这样,您将拥有一个巨大的单词索引,并且如果搜索是针对“foo”的,则索引将显示该单词可以在文件file39209.xml,file57209和file01009.xml中找到。根据XML的性质,您甚至可以将这些元素存储在索引文件中(实质上,就像将所有的XML文件放到一个文件中一样)。

1

我假设您正在使用Windows,并且您可以使用Windows桌面搜索快速搜索文件。您将使用Windows索引,在文件更改时更新该索引。可以使用.NET的SDK is available here可以使用.NET

0

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

+0

谢谢大家的回复,实际上xml文件无法转换为数据库,但我会将所有唯一的单词编入索引并将它们链接到文件ID。真的很感谢你提前。 – 2012-04-15 03:04:35

0

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