我按照这篇文章http://leoncullens.nl/post/2012/11/18/Full-Text-Search-on-Azure-with-LuceneNET.aspx来设置 Lucene 索引。
它在大多数情况下运行顺利我如何编辑它,以便如果存在与 id 绑定的现有文档以删除它然后重新插入它?
编辑以下方法:
public void CreateIndex() {
IndexWriter indexWriter = new IndexWriter(_directory, new StandardAnalyzer(Version.LUCENE_30), true, IndexWriter.MaxFieldLength.UNLIMITED); // Create the IndexWriter
foreach (Book book in _bookService.List()) // Use whatever data source you like
{
// NEED TO INSERT A CHECK HERE TO SEE IF A DOC EXISTS
Document document = CreateBookDocument(book); // Create a 'Document' for each row of your data
indexWriter.AddDocument(document);
}
try
{
indexWriter.Optimize(); // Call optimize once to improve performance
indexWriter.Dispose(); // Commit and dispose the object
Thread.Sleep(60 * 10 * 1000); // Sleep 10 minutes when the index is created successfully, otherwise immediately restart the process
}
catch (Exception)
{
indexWriter.Rollback();
indexWriter.Dispose();
}
}
private Document CreateBookDocument(Book book)
{
Document document = new Document();
document.Add(new Field("Id", book.Id.ToString(), Field.Store.YES, Field.Index.NO, Field.TermVector.NO)); // We want to store the ID so we can retrieve data for the ID, but we don't want to index it because it is useless searching through the IDs
document.Add(new Field("Title", book.Title, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.NO));
document.Add(new Field("Publisher", book.Publisher, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.NO));
document.Add(new Field("Isbn10", book.Isbn10, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.NO));
return document;
}