【发布时间】:2017-12-07 17:09:43
【问题描述】:
我想在我的网站上实现一个全文搜索引擎,我将使用 Lucene.NET。我的主要数据使用 EF6 存储在 SQL Server 中。
我遇到的问题是我想要搜索多个实体(例如帖子、评论、消息、条目等)。一些实体具有属性 Title,一些其他模型具有属性 Content,还有一些具有 Description,或所有这些的组合。
所以,我正在考虑只实现一个自定义 lucene 搜索表,如下所示:
public class LuceneSearchResult
{
public ModelType ModelType { get; set; }
public int GenericId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public string Description { get; set; }
}
现在,ModelType 是一个枚举(整数),它引用一个实体类(例如 Posts、Comments、Entries 等),而 GenericId 是指定 ModelType 的 Id(整数主键)。例如,唯一的主键(即使 Lucene 无法识别)将是 ModelType=Post, GenericId=3。
我使用这种方法,所以当我搜索字符串时,我将使用 MultiFieldQueryParser 来查找 LuceneSearchResult 的 Title、Content、Description 列。从结果中,我将获得 ModelType 和 GenericId,然后我将使用 EF6 从 SQL Server 检索正确的对象。
我将采用这种方法,因此我不会创建很多 Lucene 表,为我的每个实体创建一个,这些表很多。
问题:
这是解决此问题的正确方法吗?
在 Lucene 中搜索以获取包含字符串的对象,然后从 SQL Server 中检索整个实体是否有效?
如果我在 LuceneSearchResultin 中只创建一个结合 ModelType 和 GenericId 的列,效率会更高吗?
谢谢:)
【问题讨论】:
标签: c# sql-server entity-framework lucene