Ich habe die folgende Klasse in RavenDB gespeichert:Wie verschiedene Werte in RavenDb aus einer Eigenschaft des Typs IList <string> abrufen?
public class User
{
public string Id {get;set;}
public string Name {get;set;}
public IList<string> Phrases {get;set;}
}
und ich möchte alle die unterschiedlichen Sätze aller Benutzer.
Lösungen 1 (nicht getestet)
session.Query<User>().SelectMany(c=>c.Educations).Distinct();
Glauben Sie, wird es mit diesem Ansatz Performance-Probleme sein?
Lösung 2 (getestet) mit Google fand ich, dass session.Advanced.DatabaseCommands.GetTerms() verschiedene Werte einer Eigenschaft zu erhalten, ist gut. Aber hier habe ich eine List-Eigenschaft. dazu nach:
- ich erstellen Sie eine benutzerdefinierte Tokenizer auf CharTokenizer basierend Werte zu teilen, basierend auf einem bestimmten Zeichen (|);
- Ich erstelle einen benutzerdefinierten Analyzer ähnlich WhiteSpaceAnalyzer;
- Ich erstelle einen Index mit "Phrasen = string.join (" | ", Phrasen)" in der Karte, meinen kundenspezifischen Analysator spezifizierend;
- Ich benutze session.Advanced.DatabaseCommands.GetTerms (Myindexname, Phrasen, null, int.maxvalue).
Was ist Ihrer Meinung nach besser? Andere bessere/einfachere Lösungen?
Danke.
Ich schlage auch vor, KeywordAnalyzer zu verwenden; StandardAnalyzer teilt jedes einzelne Wort auf. Danke. – Sierrodc