Добавление документа в Lucene - PullRequest
0 голосов
/ 23 октября 2011

У меня есть следующий код, который я написал:

        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 вместо добавления нового ... что мне здесь не хватает?

1 Ответ

1 голос
/ 23 октября 2011

В вашем коде вы заново создаете индекс при каждом запуске / вызове метода.Итак, ваш предыдущий индекс удален.

IndexWriter writer = новый IndexWriter (каталог, анализатор, true , IndexWriter.MaxFieldLength.UNLIMITED);


BTW, условияхранятся отсортированы в люцене.Вы можете сделать свои расчеты при перечислении терминов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...