[.net] RavenDB: मल्टी मैप्स / कम इंडेक्सस का उपयोग कैसे करें


Answers

Question

मेरे पास काफी सरल मॉडल है:

public class PhraseMeta:
{
 public int Id { get; set; }
 public string ModuleName { get; set; }
 public string Description { get; set; }
 public DateTime ModifiedDate { get; set; }
}

public class Phrase
{
  public int Id { get; set; }
  public int PhraseMetaId { get; set; } //reference to PhraseMeta
  public string Language { get; set; }
  public string Text { get; set; }
}

वाक्यांश में कुछ अनुवाद हैं और वाक्यांश वाक्यांश कई वाक्यांशों के लिए मेटा जानकारी है। मैं मॉड्यूलनाम और भाषा वाला वाक्यांश पाठ ढूंढने का प्रयास कर रहा हूं जैसा कि मैंने RavenDB के मल्टी मैप्स / कम इंडेक्सस सुविधा को समझते हुए कहीं कहीं भी इसे कहीं से भी मदद कर सकते हैं। मेरा सूचकांक है:

public class PhraseEntry
{
  public string MetaId { get; set; }
  public string ModuleName { get; set; }
  public string Language { get; set; }
  public string Text { get; set; } 
}

public class PhraseTranslationIndex : AbstractMultiMapIndexCreationTask<PhraseEntry>
{
  public PhraseTranslationIndex()
  {
    this.AddMap<PhraseMeta>(phraseMetas => from pm in phraseMetas
                 select new
                 {
                   MetaId = pm.Id,
                   ModuleName = pm.ModuleName,
                   Language = (string)null,
                   Text = (string)null
                 });

    this.AddMap<Phrase>(phrases => from phrase in phrases
               select new
               {
                 MetaId = phrase.PhraseMetaId,
                 ModuleName = (string)null,
                 Language = phrase.Language,
                 Text = phrase.Text
               });

    this.Reduce = results => from entry in results
                 group entry by entry.MetaId
                   into g
                   select new
                   {
                     MetaId = g.Key,
                     ModuleName = g.Select(x => x.ModuleName).Where(x => x != null).First(),
                     Language = g.Select(x => x.Language).Where(x => x != null).First(),
                     Text = g.Select(x => x.Text).Where(x => x != null).First()
                   };

    this.Index(x => x.ModuleName, FieldIndexing.Analyzed);
    this.Index(x => x.Language, FieldIndexing.Analyzed);
    this.Index(x => x.Text, FieldIndexing.Analyzed);
  }
}

मैं इसे उपयोग करने की कोशिश कर रहा हूं:

var entry = documentSession.Query<PhraseEntry, PhraseTranslationIndex>
                           .Where(p => p.ModuleName == "MyModule")
                           .Where(p => p.Language == "en")
                           .FirstOrDefault();

और इस सूचकांक का कोई परिणाम नहीं है। मैं 472 बिल्ड का उपयोग कर रहा हूँ

कोई विचार?






Links