2014-09-01 3 views
0

Я пытаюсь создать форму, где я могу добавить индекс, в настоящее время форма имеет 4 метки, текстовые поля и 1 кнопку. Когда я нажимаю кнопку, я хочу, чтобы индекс был создан, он создается, но всякий раз, когда я создаю новый индекс, старый перезаписывается. Как мне решить эту ошибку. Кроме того, есть ли способ, где я могу генерировать имена для документов автоматически например, вместо того, чтобы просто вар игрушки, для каждого документа я могу назвать, как toy1, toy2 и т.д ...Lucene.net переписывание при создании нового индекса

namespace luceneForm 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 

     } 

     private void button1_Click(object sender, EventArgs e) 
     { 


      var toy = new Document(); 
      toy.Add(new Field("Id", textBox1.Text, Field.Store.YES, Field.Index.ANALYZED));//adding a new field //Field.Store.Yes = store the field in lucene index 
      toy.Add(new Field("Name", textBox2.Text, Field.Store.YES, Field.Index.ANALYZED)); 
      toy.Add(new Field("Color", textBox3.Text, Field.Store.YES, Field.Index.ANALYZED)); 
      toy.Add(new Field("Description", textBox4.Text, Field.Store.YES, Field.Index.ANALYZED)); 

      Directory directory = FSDirectory.Open(new DirectoryInfo(Environment.CurrentDirectory + "\\luceneFormDemo1")); 

      Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29); 
     //to analyze text in lucene index using the lucene 29 version 

      var writer = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.LIMITED); 
     //Now we need a writer to write documents to the index 

      writer.AddDocument(toy); 
      writer.Optimize();//to make it faster to search 
      writer.Dispose(); 

     //----------if you run till here the folder will be created 

     //----------now to search through our index(we will need a reader) 
      MessageBox.Show("Index Saved"); 
      textBox1.Clear(); 
      textBox2.Clear(); 
      textBox3.Clear(); 
      textBox4.Clear(); 
     } 
    } 
} 

ответ

1

Третий аргумент IndexWriter constructor указывает, должен ли быть создан новый индекс. Установите для него значение false, чтобы открыть старый индекс, а не переписать его.

var writer = new IndexWriter(directory, analyzer, false, IndexWriter.MaxFieldLength.LIMITED);