ElasticSearch ile etkileşimde bulunmak için NEST kütüphanesini kullanıyorum ve tip olmayan verilere göre indeks türleri/iç içe nesneler oluşturmanın bir yolunu bulmaya çalışıyorum. Tip aşağıdaki temel yapıya sahiptir.Tek bir .NET türünü, ElasticSearch/NEST içinde birden çok iç içe geçmiş nesne türüne nasıl eşlerim?
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; }
}
}
Her NestedType örneği için yuvalanmış bir nesne/tür oluşturmak istiyorum. Dolayısıyla, iki NestedType örneği varsa, iki yuvalanmış nesne olacaktır. NEST'in doğru olarak eşleştiğini (yani, her bir sözlük anahtarını bir özelliğe dönüştürdüğünüzde) "gerçek" özelliklere dönüştürmek için, DynamicObject öğesinden NestedType'ı alabilirim. Sorun, iç içe geçmiş nesnenin adını/türünü nasıl ayarlayacağımı anlayamamam.
Bildiğim isimleri eşlemek için iki yol vardır: ElasticType özniteliği ve NestedObject akıcı arabirimi. Buradaki problem, çoklu yuvalanmış nesne tiplerini temsil eden tek bir tip olmasıdır. Bazı çalışma zamanı tipi yapıları yapabilirim, ancak bunu önleyebilir miyim?
İç içe nesnenin adı/türü olarak bir yöntem veya özellik kullanılmasının bir yolu var mı? Ya da bu türdeki verileri ElasticSearch'e (NEST üzerinden umarım) haritalamak için daha iyi bir yaklaşım var mı?
Teşekkürler! Erick Ben (İstediğimi yapmak JsonSerializer almak için DynamicObject kullanarak) ne yapıyorum yansıtacak şekilde varlık tanımını güncellenmiş
DÜZENLEME. İstediğim şey, farklı sözlüklerin farklı eşlemelere sahip olma yeteneği (farklı kaynak, analizci, vb.). Uygun türler varsa, bunu ayarlamak için NEST akıcı sözdizimini kullanabilirdim, ancak dinamik kullanırken, kullanılacak akıcı API için herhangi bir tür yoktur. Sonuçta, akıcı API'yi türler yerine dizelere dayalı bir dizeyle karıştırmak istiyorum. Bu mantıklı mı?
Girdiye bir örnek verebilir misiniz ve ES'de ne olmasını bekler misiniz? thx –
Örnek bir haritalama yararlı olacaktır. Bunun gibi bir özel json dönüştürücü özniteliği olabilir misiniz: http://stackoverflow.com/questions/29173196/c-sharp-json-serialization-use-value-instead-of-property-name – Calle