我有一个XML文件,我想使用Lucene.NET进行索引。该文件基本上是一大堆日志。 由于单个文件本身超过5GB并且我在具有2GB RAM的系统上开发代码,如何在不解析文件时执行索引,也不创建除“text”之外的任何其他字段,其中包含文件数据?
我正在使用CodeClimber中的一些代码,目前还不确定索引这么大的单个文件的最佳方法是什么。
有没有办法将文件数据传递给块中的索引?下面是基本上创建文本字段和相关文件数据的代码行
Document doc = new Document();
doc.Add(new Field("Body", text, Field.Store.YES, Field.Index.TOKENIZED));
writer.AddDocument(doc);
感谢您的指导
答案 0 :(得分:3)
你应该使用System.Xml.XmlReader
之类的东西,它不会将整个xml加载到内存中。但是将整个xml索引为单个文档没有意义,因为每次搜索都会得到1或0个文档。(找到或找不到)。因此,能够以块的形式传递数据对您没有多大帮助。因此,在读取xml文件时,应将其拆分为多个文档(和字段),以便在搜索时获得一些合理的结果。
如何在不解析文件时执行索引,也不创建除“text”以外的任何其他字段,其中包含文件数据
这将是一个多么美妙的世界
答案 1 :(得分:0)
索引这么大的文件没问题。只需使用SAX解析器解析XML文件(它是基于事件的,不需要将文件加载到内存中来处理它),缓冲输入,然后在每个日志事件结束时将文档添加到IndexWriter。