Tôi đang sử dụng thư viện NEST để tương tác với ElasticSearch và tôi đang cố gắng tìm cách xây dựng các loại chỉ mục/đối tượng lồng nhau dựa trên dữ liệu không phải loại. Loại có cấu trúc cơ bản sau.Làm cách nào để ánh xạ một loại .NET đơn lẻ đến nhiều loại đối tượng lồng nhau trong ElasticSearch/NEST?
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; }
}
}
Tôi muốn tạo đối tượng lồng nhau/loại cho từng trường hợp của NestedType. Vì vậy, nếu có hai trường hợp của NestedType, thì sẽ có hai đối tượng lồng nhau. Tôi có thể kế thừa NestedType từ DynamicObject để biến từ điển thành các thuộc tính "thực" mà NEST sau đó ánh xạ chính xác (tức là, biến từng từ điển thành một thuộc tính). Vấn đề là tôi không thể tìm ra cách đặt tên/kiểu của đối tượng lồng nhau.
Có hai cách để ánh xạ tên mà tôi biết: Thuộc tính ElasticType và giao diện thông thạo NestedObject. Vấn đề ở đây là có một kiểu đơn thể hiện nhiều kiểu đối tượng lồng nhau. Tôi có thể làm một số kiểu xây dựng thời gian chạy, nhưng tôi không muốn nếu tôi có thể tránh được nó.
Có cách nào để sử dụng phương thức hoặc thuộc tính làm tên/loại đối tượng lồng nhau không? Hoặc là có một cách tiếp cận tốt hơn để lập bản đồ loại dữ liệu này để ElasticSearch (hy vọng thông qua NEST)?
Cảm ơn! Erick
EDIT
tôi cập nhật các định nghĩa thực thể để phản ánh những gì tôi đang làm (sử dụng DynamicObject để có được những JsonSerializer làm những gì tôi muốn). Những gì tôi muốn là khả năng cho các từ điển khác nhau có ánh xạ khác nhau, (khác nhau bắt nguồn, phân tích, vv). Nếu có các loại thích hợp, tôi có thể sử dụng cú pháp thông thạo NEST để thiết lập, nhưng khi sử dụng động, không có loại API thông thạo nào để sử dụng. Cuối cùng, tôi muốn kết hợp API thông thạo với một chuỗi dựa trên các chuỗi thay vì các loại. Điều này có nghĩa không?
bạn có thể cung cấp ví dụ về đầu vào và những gì bạn mong đợi có trong ES không? thx –
Một ánh xạ mẫu sẽ hữu ích. Bạn có thể cho chúng tôi một thuộc tính chuyển đổi json tùy chỉnh, chẳng hạn như: http://stackoverflow.com/questions/29173196/c-sharp-json-serialization-use-value-instead-of-property-name – Calle