Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 结合Lucene.NET和SQL Server检索实体_C#_Sql Server_Entity Framework_Lucene - Fatal编程技术网

C# 结合Lucene.NET和SQL Server检索实体

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

我想在我的网站上实现一个全文搜索引擎,我将使用Lucene.NET。我的主要数据使用EF6存储在SQL Server中

我遇到的问题是,我想搜索多个实体(如帖子、评论、消息、条目等)。一些实体具有属性标题,一些其他模型具有属性内容,一些其他模型具有描述,或所有这些的组合

因此,我考虑只实现一个自定义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的标题、内容和描述列。从结果中,我将获得ModelType和GenericId,然后我将使用它们使用EF6从sqlserver检索正确的对象

我使用这种方法,所以我不创建很多Lucene表,每个实体一个表,这是很多的

问题:

  • 这是解决这个问题的正确方法吗

  • 在Lucene中搜索以获取包含字符串的对象,然后从SQL Server检索整个实体是否有效

  • 如果在LuceneSearchResultin中,我只创建一个组合ModelType和GenericId的列,效率会更高吗

谢谢:)

这是解决这个问题的正确方法吗

假设它支持您的所有搜索要求,则是

在Lucene中搜索以获取包含字符串的对象,然后从Sql Server检索整个实体是否有效

是的,这是一种很常见的模式,真的。如果在显示整个选定实体(如google搜索结果页面)之前,需要向用户显示搜索结果列表供其选择,则可能需要在lucene中存储足够的数据以显示搜索结果列表,并且仅在用户选择其中一个时才查询数据库

如果在LuceneSearchResultin中,我只创建一个组合ModelType和GenericId的列,效率会更高吗


不,我看不出有什么特别的理由让你这么做。据推测,这些字段将被存储而不会被索引(也就是说,您不会对这些字段进行查询),因此我认为这不会产生任何重大影响。

谢谢您的回答@femtoRgon!现在,我想知道-如果我想选择只在特定实体中搜索(例如仅在帖子中,或仅在评论中),我是否也应该索引ModelType列,它是实体类型的标识符?@spiros-是的,如果你想搜索它,它需要索引。