我在 RavenDb 中存储了以下类:
public class User
{
public string Id {get;set;}
public string Name {get;set;}
public IList<string> Phrases {get;set;}
}
我想要所有用户的所有不同短语。
解决方案 1(未测试)
session.Query<User>().SelectMany(c=>c.Educations).Distinct();
你认为这种方法会有性能问题吗?
解决方案 2(经过测试) 通过 google,我发现 session.Advanced.DatabaseCommands.GetTerms() 可以很好地获取属性的不同值。但在这里我有一个 List 属性。根据这个:
- 我创建了一个基于 CharTokenizer 的自定义 Tokenizer,以根据特定的字符 (|) 拆分值;
- 我创建了一个类似于 WhiteSpaceAnalyzer 的自定义分析器;
- 我在 Map 中使用“phrases = string.join("|", Phrases)”创建一个索引,指定我的自定义分析器;
- 我使用 session.Advanced.DatabaseCommands.GetTerms(myindexname, phrases, null, int.maxvalue)。
在您看来,哪种方法更好?其他更好/更简单的解决方案?
谢谢。