【发布时间】:2017-05-23 14:24:00
【问题描述】:
我在 web Api 中使用 Lucene.net 创建了一个搜索引擎,我发现了一个 CRUD 像这样更新索引的代码
private void CRUDIndex()
{
Video_List video = new Video_List();
FSDirectory directory = FSDirectory.Open(new DirectoryInfo(Path), new NativeFSLockFactory());
bool isExist = IndexReader.IndexExists(directory);
if (isExist)
{
if (IndexWriter.IsLocked(directory))
{
IndexWriter.Unlock(directory);
}
}
IndexWriter writer = new IndexWriter(directory, new PanGuAnalyzer(), !isExist, IndexWriter.MaxFieldLength.UNLIMITED);
while (bookQueue.Count > 0)
{
Document document = new Document();
BookViewMode book = bookQueue.Dequeue();
if (book.IT == IndexType.Insert)
{
document.Add(new Field("id", book.ID.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
document.Add(new Field("title", book.Title, Field.Store.YES, Field.Index.ANALYZED,
Field.TermVector.WITH_POSITIONS_OFFSETS));
document.Add(new Field("content", book.Starring, Field.Store.YES, Field.Index.ANALYZED,
Field.TermVector.WITH_POSITIONS_OFFSETS));
writer.AddDocument(document);
}
else if (book.IT == IndexType.Delete)
{
writer.DeleteDocuments(new Term("id", book.ID.ToString()));
}
else if (book.IT == IndexType.Modify)
{
writer.DeleteDocuments(new Term("id", book.ID.ToString()));
document.Add(new Field("id", book.ID.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
document.Add(new Field("title", book.Title, Field.Store.YES, Field.Index.ANALYZED,
Field.TermVector.WITH_POSITIONS_OFFSETS));
document.Add(new Field("content", book.Starring, Field.Store.YES, Field.Index.ANALYZED,
Field.TermVector.WITH_POSITIONS_OFFSETS));
writer.AddDocument(document);
}
}
writer.Dispose();
directory.Dispose();
}
它就像删除旧索引后添加一个新索引,但我只想更新字段并将其添加到旧索引中,我不知道如何返回 api 控制器关于更新索引,所以有没有人可以给给我一些提示或更好的提示,向我展示演示。我将不胜感激!
【问题讨论】:
标签: c# api indexing lucene.net