У меня есть следующий код, который я написал:
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29);
IndexWriter writer = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED);
Document doc = new Document();
foreach (string fieldName in Request.Form)
{
if (fieldName == "channelID" && string.IsNullOrEmpty(Request["channelID"]))
{
List<long> channelIDS = new List<long>();
IndexReader indexReader = IndexReader.Open(directory, true);
TermEnum te = indexReader.Terms(new Term("ID"));
do
{
Term t = te.Term();
if (t == null || t.Field() != "channelID") break;
channelIDS.Add(long.Parse(t.Text()));
} while (te.Next());
te.Close();
long nextAvailable = channelIDS.Concat(new[] { long.MaxValue })
.OrderBy(x => x)
.Select((value, index) => new { value, index })
.Where(pair => pair.value != pair.index)
.Select(pair => pair.index)
.First();
doc.Add(new Field(fieldName, nextAvailable.ToString(), Field.Store.YES, Field.Index.ANALYZED));
}
else
{
doc.Add(new Field(fieldName, Request.Form[fieldName], Field.Store.YES, Field.Index.ANALYZED));
}
}
writer.AddDocument(doc);
writer.Optimize();
writer.Close();
Документ уже в индексе имеет channelID
со значением 0
, а все остальные поля пусты.
Я проверил, что данные, подаваемые в документ, имеют другой идентификатор канала (даже из-за того, что все остальные поля пусты, как и существующий документ.
По какой-то причине код обновляет единственный документ, который у меня уже естьв Lucene вместо добавления нового ... что мне здесь не хватает?