我在网络Api中使用Lucene.net创建搜索引擎,我找到了一个CRUD 像这样的更新索引的代码
Colleague(s)
它就像删除旧索引后添加新索引一样,但我只是想更新字段并将其添加到旧索引中,而我不知道如何返回api控制器关于更新索引,那么是否有人可以给我给它一些提示或更好的给我看演示。我将感谢您的帮助!
答案 0 :(得分:1)
AFAIK,你不能。但是,有一种更方便的方法UpdateDocument(Term, IEnumerable<IIndexableField>)
。
else if (book.IT == IndexType.Modify)
{
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.UpdateDocument(new Term("id", book.ID.ToString()), document);
}
索引并不是一个数据库,它是一个可以添加数据以使其非常快进行搜索的位置。
要利用WebApi的更新功能,您可以捎带数据库更新(更新数据库中的字段,从数据库读取整个记录,更新索引)。或者,如果您不需要实时执行搜索,则可以定期更新批处理中的索引。
如果您的数据更新速度非常快,并且您想对实时数据进行搜索,则有以下几种选择:
Directory
并直接从数据库中读取数据。其他人已经完成了一些实施(您可以直接使用或反向工程) - LuceneNetSqlDirectory(NuGet)和AzureDirectory(NuGet)。如果以这种方式执行此操作,则只需以传统方式更新数据源中的数据即可。