Я пытаюсь следовать этому руководству при создании родительско-дочерних отношений между элементами;
https://www.elastic.co/guide/en/elasticsearch/client/net-api/master/parent-child-relationships.html
Мой вариант использования немного отличается, поскольку в учебнике создается родитель / потомокотношения между элементами в одном и том же индексе, того же типа. Я хочу создать один из двух разных типов объектов, которые должны храниться в разных индексах. Я придумал что-то вроде этого;
class MyParentType
{
public int Id {get;set;}
public string Data {get;set;}
public JoinField MyJoinField { get; } = typeof(MyParentType);
}
class MyChildType
{
public int Id {get;set;}
public string Data {get;set;}
public JoinField ParentJoinField { get; set; }
public MyChildType(MyParentType parent)
{
ParentJoinField = JoinField.Link<MyChildType, MyParentType>(parent);
}
}
public static void Main(string[] args)
{
var connectionSettings = new ConnectionSettings(
pool, (builtin, settings) => new JsonNetSerializer(builtin, settings,
() => new JsonSerializerSettings { Converters = { new StringEnumConverter() } }))
.DefaultMappingFor<MyParentType>(m => m.IndexName("parents_index"))
.DefaultMappingFor<MyChildType>(m => m.IndexName("children_index").RelationName("parents"));
var client = new ElasticClient(connectionSettings);
client.CreateIndex("parents_index", c => c
.Index<MyParentType>()
.Mappings(m => m.Map<MyParentType>(n => n
.RoutingField(r => r.Required())
.AutoMap<MyParentType>())));
client.CreateIndex("children_index", c => c
.Mappings(m => m.Map<MyChildType>(n => n
.RoutingField(r => r.Required())
.AutoMap<MyChildType>()
.Properties(props => props
.Join(j => j
.Name(l => l.ParentNoteJoinField)
.Relations(r => r
.Join<MyParentType, MyChildType>()))))));
var descriptor = new BulkDescriptor();
descriptor.IndexMany(GetSomeCollectionOfParents());
var response = client.Bulk(descriptor);
}
Однако последняя строка возвращает ошибочный ответ от ElasticSearch;
операция [0]: индекс вернул 400 _index: parent_index _type: myparenttype _id: 123 _version: 0 ошибка: Тип: mapper_parsing_exception Причина: «сопоставление объектов для [myJoinField] попыталось проанализировать поле [myJoinField] как объект, но обнаружило конкретное значение»
Может кто-нибудь пожалуйстаукажите, что я делаю не так?