将文档添加到Lucene

时间:2011-10-23 19:30:38

标签: c# lucene add

我写了以下代码:

        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中已有的单个文档, 而不是添加一个...我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

在您的代码中,您将使用每次运行/方法调用重新创建索引。因此,您之前的索引将被删除。

IndexWriter writer = new IndexWriter(directory,analyzer, true ,IndexWriter.MaxFieldLength.UNLIMITED);


顺便说一下,术语在lucene索引中存储排序。您可以在枚举术语时进行计算。

相关问题