.net 如何从IList类型的属性中检索RavenDb中的不同值<;字符串>;?
我在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
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索引获取术语,但您必须对其进行基准测试才能确定;标准分析器拆分每个单词。谢谢。我还建议使用关键字分析器;标准分析器拆分每个单词。非常感谢。