Я использую клиент NESTasticsearch Version = 6.0.0.0. Вот мой POCO:
public abstract class Animal
{
public bool IsWild { get; set; }
}
public class Dog : Animal
{
public string BarkSound { get; set; }
}
public class Tiger : Animal
{
public string SavannahPlace { get; set; }
}
public class Zoo
{
public IEnumerable<Animal> Animals { get; set; }
}
У меня есть индекс эластичного поиска, в котором я хочу хранить объекты Zoos. Поскольку в Zoo есть этот перечислимый абстрактный класс, у меня возникают проблемы с настройкой сопоставления для него.
Вот как я пытался отобразить Zoo, используя отображение Fluent:
.Index("zoos")
.Mappings(map => map
.Map<Zoo>(doc => doc
.AutoMap()
.Properties(prop => prop
.Object<Animal>(obj => obj
.Name(n => n.Animals)
.AutoMap()
.Properties(prop => prop
.Keyword(p => p.Name(n => n.IsWild))
)
)
.Object<Dog>(obj => obj
.Name(n => n.Animals)
.AutoMap()
.Properties(prop => prop
.Text(p => p.Name(n => n.BarkSound))
)
)
.Object<Tiger>(obj => obj
.Name(n => n.Animals)
.AutoMap()
.Properties(prop => prop
.Keyword(p => p.Name(n => n.SavannahPlace))
)
)
)
)
);
Но делая это конфигурирует отображение для Unite.Animals с последним .Object, который является Тигром, поэтому я собираюсь иметь конфигурацию animal только с базовыми реквизитами Animals и ключевым словом SavannahPlace, потеряв в этом примере ключевое слово BarkSound.
IMO Правильнее всего было бы иметь все свойства всех подклассов Animal для перечислимого Animal.
Так что мой текущий обходной путь - иметь другой класс для Animal, AnimalAll. «Класс, обладающий всеми возможными свойствами всех животных, предназначался для индексации, и мне пришлось бы специально сопоставить в нем обычное животное, чтобы настроить отображение. Но это звучит странно для меня, поэтому я прошу вашей помощи ...
Спасибо, ребята, позаботьтесь.