Ich benutze die NEST-Bibliothek, um mit ElasticSearch zu interagieren, und ich versuche, einen Weg zu finden, um Indextypen/verschachtelte Objekte basierend auf Nicht-Typ-Daten zu erstellen. Der Typ hat die folgende Grundstruktur.Wie kann ich einen einzelnen .NET-Typ mehreren verschachtelten Objekttypen in ElasticSearch/NEST zuordnen?
public class Entity : DynamicObject
{
public string Id { get; set; }
// a bunch of other simple properties
public override IEnumerable<string> GetDynamicMemberNames()
{
return Data.Select(x => x.Name);
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
var dictionary = Data.First(x => x.Name == binder.Name);
result = dictionary;
return true;
}
// each instance of one these should be a nested object type
public IList<NestedType> Data { get; set; }
public class NestedType
{
// How do I make Name be the nest type name?
public string Name { get; set; }
public IDictionary<string, string> Values { get; set; }
}
}
Ich möchte ein verschachteltes Objekt/Typ für jede Instanz von NestedType erstellen. Wenn also zwei Instanzen von NestedType vorhanden sind, sind zwei verschachtelte Objekte vorhanden. Ich kann NestedType von DynamicObject erben, um das Wörterbuch in "echte" Eigenschaften zu verwandeln, die NEST dann korrekt abbildet (d. H. Jeden Wörterbuchschlüssel in eine Eigenschaft umwandeln). Das Problem ist, dass ich nicht herausfinden kann, wie man den Namen/Typ des verschachtelten Objekts einstellt.
Es gibt zwei Möglichkeiten, Namen, die ich kenne, zuzuordnen: ElasticType-Attribut und NestedObject fließende Schnittstelle. Das Problem besteht darin, dass es einen einzelnen Typ gibt, der mehrere verschachtelte Objekttypen darstellt. Ich könnte einige Runtime-Typen bauen, aber ich möchte lieber nicht, wenn ich es vermeiden kann.
Gibt es eine Möglichkeit, eine Methode oder Eigenschaft als Namen/Typ des verschachtelten Objekts zu verwenden? Oder gibt es einen besseren Ansatz für die Zuordnung dieser Art von Daten zu ElasticSearch (hoffentlich über NEST)?
Danke! Erick
EDIT
ich die Entitätsdefinition aktualisiert, um, was ich tue (Dynamic mit dem JsonSerializer zu bekommen zu tun, was ich will). Was ich will, ist die Fähigkeit für die verschiedenen Wörterbücher, unterschiedliche Zuordnungen zu haben (verschiedene Stemming, Analysatoren, usw.). Wenn es richtige Typen gäbe, könnte ich die fließende NEST-Syntax verwenden, um sie einzurichten, aber wenn dynamic verwendet wird, gibt es keinen Typ für die flüssige API, der verwendet werden soll. Letztendlich möchte ich die fließende API mit einer Zeichenfolge kombinieren, die auf Zeichenfolgen statt auf Typen basiert. Macht das Sinn?
könnten Sie ein Beispiel für die Eingabe geben, und was erwarten Sie in ES bitte? thx –
Eine Beispielzuordnung wäre hilfreich. Könnten Sie uns ein benutzerdefiniertes JSON-Converter-Attribut, wie zum Beispiel: http://stackoverflow.com/questions/29173196/c-sharp-json-serialization-use-value-instead-of-property-name – Calle