Когда я пытаюсь проиндексировать документ моего определенного типа, имея список, который должен быть отображен как вложенный объект («type»: «inested»), он получает сопоставление как обычный тип объекта.Проблемы с вложенными объектами с использованием Nest
Взгляните на код:
У меня есть простой класс, как этот:
[ElasticType()]
public class MyJob
{
[ValueFieldAttribute]
public int jobCode { get; set; }
[ValueFieldAttribute(Type = FieldType.nested)]
public IList<JobProfessionalFieldInfo> JobProfessionalFields { get; set; }
}
Код класса JobProfessionalFieldInfo является:
[ElasticType()]
public class JobProfessionalFieldInfo
{
[ValueFieldAttribute]
public int JobId { get; set; }
[ValueFieldAttribute]
public int CategoryId { get; set; }
}
Кодекса для класса ValueFieldAttribute:
public class ValueFieldAttribute : ElasticPropertyAttribute
{
public ValueFieldAttribute()
: base()
{
this.Store = false;
this.Index = FieldIndexOption.not_analyzed;
}
}
Моя программа:
static void Main(string[] args)
{
ConnectionSettings node = new ConnectionSettings(new Uri("http://localhost:9200"));
node.SetDefaultIndex("jobs");
ElasticClient client = new ElasticClient(node);
List<JobProfessionalFieldInfo> list = new List<JobProfessionalFieldInfo>();
list.Add(new JobProfessionalFieldInfo { CategoryId = 1, JobId = 1 });
list.Add(new JobProfessionalFieldInfo { CategoryId = 2, JobId = 2 });
var res = client.Index<MyJob>(new MyJob
{
jobCode = 1,
JobProfessionalFields = list
},"jobs", "MyJob",1);
}
Теперь, когда я запускаю его, он индексирует объект успешно ... НО (!!), когда я получаю отображение индекса с GET заданий/MyJob/_mapping, я вижу что jobProfessionalFields не имеет «типа»: «вложен» в его отображение.
Это приводит в запросе, как следующий один, возвращая индексированный документ, пока он не должен получить его обратно (это то, что вложенные типа для правой ..?):
GET jobs/_search
{
"query":
{
"bool":
{
"must":
[
{"match": {"jobId":1}},
{"match": {"categoryId":2}}
]
}
}
}
Это не end: Я бы посмотрел на here, , там ответчик ответил, что, когда мы используем аннотации, нам нужно вручную вызвать методы createIndex и Map, но проблема в том, что у меня нет универсального метода Map. .! Взгляните на here: (просто чтобы вы попали в ссылку - вот его начало ..)
namespace Nest
{
public partial class ElasticClient...
И я не знаю, как использовать, не универсальный метод Map поставить отображение мой класс MyJob.
Как я могу заставить этот материал отображать jobProfessionalFields как чужие вложенные типы?
Спасибо за любую помощь вам, ребята!