2016-08-30 2 views
4

대량 메소드 NEST에서 까지 Eldersearch에 색인 하위 레코드을 사용하는 데 문제가 있습니다.탄성 검색 C# NEST IndexMany Children

나는 2.4.4

내가 같은 인덱스 매핑 한 ElasticSearch 2.3.5 및 NEST을 사용하고 있습니다 :

myindex 
    { 
    "mappings": { 
     "elasticparent": {}, 
     "elasticchild": { 
      "_parent": { 
      "type": elasticparent 
      } 
     } 
     } 
    } 

을 그리고 나는 IndexMany 방법을 사용하여 부모 객체를 색인 한 :

client.IndexMany<elasticparent>(batch, "myindex"); 

이 모든 것이 잘 작동합니다.

IndexMany을 사용하여 하위 색인을 생성하려고합니다. 다음은 지금까지 시도한 내용입니다.

 client.Bulk(s => s.IndexMany(IenumerableOfChild, 
            (bulkDescriptor, record) => 
            bulkDescriptor.Index("myindex").Type("elasticchild").Parent(record.Id))); 

자식과 부모는 동일한 ID 정수를 공유합니다.

나는 오류가 없지만 아이들은 색인이 생성되지 않으며 문서는 총 색인 생성 횟수에 절대 추가되지 않습니다. 개별적으로 인덱싱

작동합니다

foreach (var child in IenumerableOfChild 
      { 

       client.Index(child, descriptor => descriptor 
       .Parent(child.Id.ToString()).Index("myindex")); 
      } 

I 개별적으로 인덱스 질량 금액에 싶지 않아요. IndexMany를 사용하여 하위 레코드를 대량으로 인덱스하고 싶습니다. 누군가 내가 잘못하고있는 것을 지적 할 수 있습니까?

답변

3

추가 조사가 끝나면 Elastic Server가 시간 초과를 반환하고 있습니다. 한 번에 1000 개의 항목으로 요청을 일괄 처리하면 이제 제대로 작동합니다!

foreach (IEnumerable<object> batch in objects.Batch(1000)) 
      { 
       var indexResponse = client.Bulk(s => s.IndexMany(batch, 
             (bulkDescriptor, record) => 
              bulkDescriptor.Index("myindex").Parent(record.Id.ToString()).Document(record).Type("elasticchild").Id(record.Id.ToString()))); 

       Console.WriteLine(indexResponse); 
      } 
+0

다행히 당신은 그 밑바닥에 있습니다. 배치 크기 및 클러스터에 보낼 수있는 동시 배치 요청 수와 함께 플레이하십시오. –

+0

감사합니다. 동시 요청은 생각하지 않았습니다. 정말 좋은 생각입니다. 아마도 대량 비동기? –

+1

작업 기반의 'BulkAsync' 메소드가 이미 존재하므로, 그것들의 콜렉션을 사용하여 동시 대량 요청을 시작할 수 있습니다. 이것을 달성하는 방법에 대한 아이디어는'master'의'BulkAll'을보십시오 - https://github.com/elastic/elasticsearch-net/blob/52541d0a472b6be85f5fe5d966374655671a3d37/src/Nest/Document/Multiple/BulkAll/ElasticClient -BulkAll.cs. 다음은이 문제에 대한 논의가 담긴 홍보 자료입니다. https://github.com/elastic/elasticsearch-net/pull/2162 –