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(テスト済み) グーグルで、session.Advanced.DatabaseCommands.GetTerms()がプロパティの個別の値を取得するのに適していることがわかりました。しかし、ここにListプロパティがあります。これによれば:
- CharTokenizerに基づいてカスタムTokenizerを作成し、特定のchar(|)に基づいて値を分割します。
- WhiteSpaceAnalyzerに似たカスタムアナライザーを作成します。
- Mapで"phrases= string.join(" | "、Phrases)"を使用してインデックスを作成し、カスタムアナライザーを指定します。
- session.Advanced.DatabaseCommands.GetTerms(myindexname、phrases、null、int.maxvalue)を使用します。
あなたの意見では、どちらのアプローチが良いですか?他のより良い/より単純な解決策?
ありがとう。