2015-01-15 1 views
0

중첩 객체 ("유형": "중첩 된")로 매핑되어야하는 목록이있는 정의 된 유형의 문서를 색인하려고하면 매핑됩니다 일반 개체 유형으로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 클래스의 경우 :

내 프로그램 : 나는 GET 작업/MyJob/_mapping와 인덱스의 매핑을 얻을 때 지금

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); 
    } 

, 내가 그것을 실행하면 인덱스 오브젝트를 성공적으로 ...하지만 (!), 나는 참조 해당 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... 

그리고 난의 매핑을 넣어 비 일반적인지도 방법을 사용하는 방법을 모른다 (.. 여기의 시작 그냥이 링크에 들어갈 수 있도록하기 위해) 내 MyJob 클래스.

이 물건으로 jobProfessionalFields를 중첩 된 유형의 동료로 매핑 할 수 있습니까?

여러분 모두 도와 주셔서 감사합니다!

답변

0

좋아, 됐어!

MapFromAttributes <>은 (적어도 현재 사용중인 Nest 버전에서는 - 0.12.0) 매핑을 지정하는 데 적합한 일반적인 방법입니다. 하지만 인덱스 생성, o.w에 대한 수동 호출이 필요합니다 (위에서 언급 한 링크에있는 사람과 같은) IndexMissing 예외를 제공합니다.

 client.CreateIndex("jobs", new IndexSettings { }); 
     var res = client.MapFromAttributes<MyJob>("jobs","MyJob"); 

하지만 그건 정말 흥미로운 이유는 그냥하지만 ​​중첩 된 매핑을 얻기 위해

[ElasticProperty (유형 = FieldType.nested)],

를 정의하는 것만으로는 충분하지 않습니다 ..

나는 그 대답을 얻게되어 기쁘다.