2015-12-01 9 views
6

Ich habe eine Entität mit einer Sammlung, und ich möchte es indizieren, aber ich habe eine harte Zeit herauszufinden, wie man das macht. Das Problem ist, dass ich hoffe, es auf die gleiche Weise zu finden, wie ich einen dynamischen Index, Lucene verwenden kann. Es ist jedoch kein kompliziertes Objekt. Ein einfaches Beispiel;RavenDB - Einrichten eines Index für die richtige Sammlung LuceneQuery

{ 
    Id: "object/id", 
    Items: [ 
     { Id: "1", Name: "One"  }, 
     { Id: "2", Name: "Two"  }, 
     { Id: "3", Name: "Three" } 
    ] 
} 

Und ich kann die in raven dynamischen Index Index leicht gebaut abfragen, mit Lucene;

Artikel, Name: „One“

Dies scheint sauber und effizient und perfekt für einige Dinge, die ich tun müssen, aber ich versuche, das Verhalten in meinem eigenen Index zu reproduzieren und andernfalls ziemlich schlecht. Ich sage es, um das Feld zu indizieren, aber es weigert sich immer noch, mich damit anzurufen;

public class Things_ByItemProperties : AbstractIndexCreationTask<Thing> 
{ 
    public Things_ByItemProperties() 
    { 
     Map = things => from thing in things 
        select new 
        { 
         Id = thing.Id, 
         Items = thing.Items 
        }; 

     Index(n => n.Items, FieldIndexing.Analyzed); 
    } 
} 

Ich weiß, dass ich einen bestimmten Teil der Sammlung zum Index hinzufügen kann, so;

public class Things_ByItemProperties : AbstractIndexCreationTask<Thing> 
{ 
    public Things_ByItemProperties() 
    { 
     Map = things => from thing in things 
        select new 
        { 
         Id = thing.Id, 
         Items = thing.Items, 
         Items_Name = this.Select(r => r.Name) 
        }; 

     Index(n => n.Items, FieldIndexing.Analyzed); 
    } 
} 

aber das ist nicht das, was ich versuche zu tun, ich habe versucht, es einzurichten mit lucene wie einem dynamischen Index viel abzufragen. Ist das nicht möglich?

Antwort

1

Ja, es kann getan werden. Es ist jedoch nicht trivial. Ich schlage vor, Sie werfen einen Blick auf die documentation. Ich bin gerade am Telefon, aber wenn Sie ein paar Probleme damit haben, kann ich Ihnen morgen ein Beispiel geben. In der Zwischenzeit können Sie sich diese SO answer ansehen.

+0

Ich blieb bei einem Problem hängen und vergaß, dass ich das beenden musste. Wenn ich dir jetzt ein Guthaben zuteile, bekommst du dann noch die Bonuspunkte vom Kopfgeld? Oder muss ich wieder Punkte ausgeben, um sie wieder zu öffnen, damit sie vergeben werden können? – Ciel

+0

Kein Problem. Ich denke, dass ich das Kopfgeld nicht gewinnen werde, aber das ist in Ordnung. Wenn dies Ihnen half, markieren Sie dies als die Antwort. Konnten Sie überhaupt tun, was Sie vorhatten? –

+0

Okay ... Ich komme endlich wieder dazu. Nein, ich werde nicht "diese Person" sein. Wenn ich wieder ein Kopfgeld mache und dann deine Antwort gutgeschrieben bekomme, wird es funktionieren? – Ciel

Verwandte Themen