我写了以下代码:
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
,其他所有字段都为空。
我已经验证了输入到文档的数据具有不同的channelID(即使所有其他字段都是空的,与现有文档相同。
出于某种原因,代码更新了我在Lucene中已有的单个文档, 而不是添加一个...我在这里缺少什么?
答案 0 :(得分:1)
在您的代码中,您将使用每次运行/方法调用重新创建索引。因此,您之前的索引将被删除。
IndexWriter writer = new IndexWriter(directory,analyzer, true ,IndexWriter.MaxFieldLength.UNLIMITED);