C# 结合Lucene.NET和SQL Server检索实体
我想在我的网站上实现一个全文搜索引擎,我将使用Lucene.NET。我的主要数据使用EF6存储在SQL Server中 我遇到的问题是,我想搜索多个实体(如帖子、评论、消息、条目等)。一些实体具有属性标题,一些其他模型具有属性内容,一些其他模型具有描述,或所有这些的组合 因此,我考虑只实现一个自定义lucene搜索表,如下所示:C# 结合Lucene.NET和SQL Server检索实体,c#,sql-server,entity-framework,lucene,C#,Sql Server,Entity Framework,Lucene,我想在我的网站上实现一个全文搜索引擎,我将使用Lucene.NET。我的主要数据使用EF6存储在SQL Server中 我遇到的问题是,我想搜索多个实体(如帖子、评论、消息、条目等)。一些实体具有属性标题,一些其他模型具有属性内容,一些其他模型具有描述,或所有这些的组合 因此,我考虑只实现一个自定义lucene搜索表,如下所示: public class LuceneSearchResult { public ModelType ModelType { get; set; } p
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的标题、内容和描述列。从结果中,我将获得ModelType和GenericId,然后我将使用它们使用EF6从sqlserver检索正确的对象
我使用这种方法,所以我不创建很多Lucene表,每个实体一个表,这是很多的
问题:
- 这是解决这个问题的正确方法吗
- 在Lucene中搜索以获取包含字符串的对象,然后从SQL Server检索整个实体是否有效
- 如果在LuceneSearchResultin中,我只创建一个组合ModelType和GenericId的列,效率会更高吗
不,我看不出有什么特别的理由让你这么做。据推测,这些字段将被存储而不会被索引(也就是说,您不会对这些字段进行查询),因此我认为这不会产生任何重大影响。谢谢您的回答@femtoRgon!现在,我想知道-如果我想选择只在特定实体中搜索(例如仅在帖子中,或仅在评论中),我是否也应该索引ModelType列,它是实体类型的标识符?@spiros-是的,如果你想搜索它,它需要索引。