Lucene.NET - индексирование одного большого файла> 1 ГБ - PullRequest
3 голосов
/ 19 марта 2012

У меня есть один XML-файл, который я хочу проиндексировать с помощью Lucene.NET.Файл представляет собой большую коллекцию логов.Поскольку размер одного файла превышает 5 ГБ, и я разрабатываю код в системе с 2 ГБ ОЗУ, как я могу выполнить индексирование, когда я не выполняю синтаксический анализ файла, и не создаю никаких других полей, кроме «text», которые должны содержать файлdata?

Я использую некоторый код из CodeClimber и в настоящее время не уверен, что будет лучшим подходом для индексации такого большого отдельного файла.

Есть ли способ передать данные файла в индекс кусками?Ниже приведена строка кода, которая в основном создает текстовое поле и связанные данные файла

Document doc = new Document();
doc.Add(new Field("Body", text, Field.Store.YES, Field.Index.TOKENIZED));
writer.AddDocument(doc);

Спасибо за руководство

Ответы [ 2 ]

3 голосов
/ 20 марта 2012

Вы должны использовать что-то вроде System.Xml.XmlReader, которое не загружает весь xml в память. Но индексирование всего XML как отдельного документа не имеет смысла, поскольку при каждом поиске вы получите 1 или 0 документ ( найдено или не найдено ). Таким образом, возможность передавать данные по частям вам не сильно поможет. Поэтому, читая ваш XML-файл, вы должны разбить его на множество документов (и полей), чтобы вы могли получить некоторые разумные результаты при поиске.

как мне выполнить индексацию, когда я не анализирую файл и не создаю никаких других полей, кроме "text", которые должны содержать данные файла

какой это был бы чудесный мир

0 голосов
/ 19 марта 2012

Индексирование таких больших файлов не проблема. Просто проанализируйте ваш XML-файл с помощью SAX-анализатора (который основан на событиях и не требует загрузки файла в память для его обработки), буферизируйте ввод и затем добавляйте документ в ваш IndexWriter в конце каждого события журнала.

...