Я хочу динамически отображать свойства внутри JObject на C # с помощью Nest. Цель состоит в том, чтобы отобразить каждое строковое поле объекта как SearchAsYouType. Я подумал о 3 способах сделать это, которые не сработали:
- Используйте AutoMap и напрямую объявите атрибут в классе C #
public class Forfait
{
public long Id { get; set; }
[SearchAsYouType()]
public string Data { get; set; }
}
public class Act
{
public JObject Entity;
}
Forfait forfait = new Forfait()
{
Data = "data",
Id = 99
};
Act act = new Act()
{
Entity = JObject.FromObject(forfait)
};
await client.Indices.CreateAsync("index", o => o
.Map<Act>(m => m
.AutoMap()
2. Используйте DynamicTemplates, но я не могу найти SearchAsYouType в сопоставлении, кажется, что его еще нет в Nest 7.4.1.
await client.Indices.CreateAsync("index", o => o
.Map<Act>(m => m
.DynamicTemplates(d =>d
.DynamicTemplate("stringassearch",dt => dt
.Match("entity.*")
.MatchMappingType("string")
.Mapping(ma =>ma
.)))));
3. Используйте Visitor, чтобы заставить каждую строку быть SearchAsYouType
public class EveryStringIsASearchAsYouTypePropertyVisitor : NoopPropertyVisitor
{
public override IProperty Visit(PropertyInfo propertyInfo, ElasticsearchPropertyAttributeBase attribute)
{
if (propertyInfo.PropertyType == typeof(String))
return new SearchAsYouTypeProperty();
return null;
}
}
await client.Indices.CreateAsync("index", o => o
.Map<Act>(m => m
.AutoMap(new EveryStringIsASearchAsYouTypePropertyVisitor(),2)
Все не удалось
У меня такое чувство, что решение находится в NEST.JsonNetSerializer, чтобы каким-то образом применить настройки, используемые в сопоставлении, внутри JObject, но я не смог найти ничего полезного.