2017-08-29 1 views
0

こんにちはElasticSearchのNESTの.NETライブラリを使用して、子オブジェクトの親を設定し、多くの構造に基本的なものを持っている...ElasticSearchが

の.NET Framework 4.5を使用して... ElasticSearchのNEST 5.xのインストール済み
public class Person { 
     public int PersonId { get; set; } 
     public string Name { get; set; } 
     public List<Skill> Skills { get; set; } 
} 

public class Skill{ 
     public int PersonId { get; set; } 
     public int SkillId { get; set; } 
     public string Name { get; set; } 
     public string Description { get; set; } 
} 

..

私は

次試してみましたので、NESTは自動的に親子関係をマッピングすることを想定した最後の2日間からウェブが、スキルの親として人を設定する方法を見つけることができません。..

を探る

人はどんな問題なししかしpersonskill DOC、私はこのエラーを取得しています時に作成するためのは

private ElasticLowLevelClient client = new ElasticLowLevelClient();  

public void CreatePerson(Person person) 
     { 
var parentResponse = client.Index(person, i => i.Index("myindex").Type("person").Id(person.PersonId)); 
    foreach (var skill in person.Skills) 
    { 
     var skillResponse = client.Index(skill, i => i.Index("myindex").Type("personskills").Parent(person.PersonId.ToString()).Id(skill.SkillId)); //here I am getting error 
    } 
} 

ドキュメント:

Iを探索しながら親フィールドが

を設定されていない場合は、親を指定することはできません私はマッピングの子に親の型を設定する必要があることを言っている記事を見つけることができます..どのように..どのようにカスタムマップのインデックスと、どのようにする必要がありますどのようなヒント..

答えて

0

問題は私がunabだったことでしたルは、私たちが事前に定義されたマッピングにインデックスを作成することで、それらをマッピングすることができます。..適切親子のドキュメントをマップするか、我々はインデックスマッピング

作成に更新することができます

private ElasticLowLevelClient client = new ElasticLowLevelClient();  
private CreateIndexDescriptor descriptor = new CreateIndexDescriptor("myindex") 
       .Mappings(ms => ms 
       .Map<Person>("person", m => m.AutoMap()) 
       .Map<Skill>("personskills", m => m.AutoMap().Parent("person")) 
     );   

public void CreatePerson(Person person) 
{ 
    client.CreateIndex(descriptor); //I am creating it here but one can create it in the class where we will create ElasticClient 
    var parentResponse = client.Index(person, i => i.Index("myindex").Type("person").Id(person.PersonId)); 
    foreach (var skill in person.Skills) 
    { 
     var skillResponse = client.Index(skill, i => i.Index("myindex").Type("personskills").Parent(person.PersonId.ToString()).Id(skill.SkillId)); //here I am getting error 
    } 
} 

更新マッピング

public void CreatePerson(Person person) 
     { 
client.Map<Skill>(m => m 
           .Parent("person").Index("myindex")); //this will put the default mapping of default index 
var parentResponse = client.Index(person, i => i.Index("myindex").Type("person").Id(person.PersonId)); 
    foreach (var skill in person.Skills) 
    { 
     var skillResponse = client.Index(skill, i => i.Index("myindex").Type("skill").Parent(person.PersonId.ToString()).Id(skill.SkillId)); //here I am getting error 
    } 
} 

ここでは、子ドキュメントタイプをデフォルト値に変更しましたが、マッピングでこれを設定できます。これが他人を助けることができることを願います。