Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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/1/list/4.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
.net 如何从IList类型的属性中检索RavenDb中的不同值<;字符串>;?_.net_List_Distinct_Ravendb - Fatal编程技术网

.net 如何从IList类型的属性中检索RavenDb中的不同值<;字符串>;?

.net 如何从IList类型的属性中检索RavenDb中的不同值<;字符串>;?,.net,list,distinct,ravendb,.net,List,Distinct,Ravendb,我在RavenDb中存储了以下类: public class User { public string Id {get;set;} public string Name {get;set;} public IList<string> Phrases {get;set;} } 公共类用户 { 公共字符串Id{get;set;} 公共字符串名称{get;set;} 公共IList短语{get;set;} } 我想要所有用户的所有不同短语 解决方案1(未测试) sessi

我在RavenDb中存储了以下类:

public class User
{
  public string Id {get;set;}
  public string Name {get;set;}
  public IList<string> Phrases {get;set;} 
}
公共类用户
{
公共字符串Id{get;set;}
公共字符串名称{get;set;}
公共IList短语{get;set;}
}
我想要所有用户的所有不同短语

解决方案1(未测试)

session.Query<User>().SelectMany(c=>c.Educations).Distinct();
session.Query().SelectMany(c=>c.Educations.Distinct();
您认为这种方法会有性能问题吗

解决方案2(已测试) 通过google,我发现session.Advanced.DatabaseCommands.GetTerms()可以很好地获取属性的不同值。但这里我有一个列表属性。 据此:

  • 我基于CharTokenizer创建了一个自定义标记器,以基于特定字符(|)分割值
  • 我创建了一个类似于WhiteSpaceAnalyzer的自定义分析器
  • 我在地图中创建了一个带有“phrases=string.join(“|”,phrases)”的索引,指定了我的自定义分析器
  • 我使用session.Advanced.DatabaseCommands.GetTerms(myindexname、短语、null、int.maxvalue)
在你看来,哪种方法更好?其他更好/更简单的解决方案


谢谢。

如果您按如下所示编写索引:

from user in docs.Users
from phrase in user.Phrases
select new { phrase }
然后,
session.Advanced.DatabaseCommands.GetTerms()
将起作用,因此您可以使用解决方案2,而不会增加任何复杂性


我认为解决方案2将是最有效的,因为它直接从Lucene索引中获取术语,但您必须对其进行基准测试才能确定。

如果您按照如下所示编写索引:

from user in docs.Users
from phrase in user.Phrases
select new { phrase }
然后,
session.Advanced.DatabaseCommands.GetTerms()
将起作用,因此您可以使用解决方案2,而不会增加任何复杂性


我认为解决方案2将是最有效的,因为它直接从Lucene索引获取术语,但您必须对其进行基准测试才能确定;标准分析器拆分每个单词。谢谢。我还建议使用关键字分析器;标准分析器拆分每个单词。非常感谢。