2015-06-04 22 views
6
Ben elasticsearch için 100k ürünlerini eklemeyi deneyin

ile ElasticSearch için, ama ben çalıştığınızda i olsun: { ": 1: Doğrulama Başarısız hiçbir istekleri ekledi;"}Toplu ekleme ANDAE

Kodum:

 var Node = new Uri("......"); 
     var ConnectionPool = new SniffingConnectionPool(new[] { Node }); 
     var Config = new ConnectionConfiguration(ConnectionPool) 
        .SniffOnConnectionFault(false) 
        .SniffOnStartup(false) 
        .SniffLifeSpan(TimeSpan.FromMinutes(10)); 
     var Client = new ElasticsearchClient(Config); 

     var AllProducts = Product.GetProducts(); 
     var SPl = AllProducts.Split(100); // Split into 100 collections/requests 

     var COll = new List<ElasticsearchResponse<DynamicDictionary>>(); 

     foreach (var I in SPl) 
     { 
      var Descriptor = new BulkDescriptor(); 

      foreach (var Product in I) 
      { 
       Descriptor.Index<Product>(op => op.Document(Product)); 
      } 

      COll.Add(Client.Bulk(Descriptor)); 
     } 

allproducts bu nesnenin bir listesini içerir: Yani

public class Product 
{ 
public int AffiliateNr { get; set; } 
public string AffiliateProductId { get; set; } 
public int BrandNr { get; set; } 
public string Currency { get; set; } 
public string IndexId { get; set; } 
public decimal Price { get; set; } 
public long ProductNr { get; set; } 
public string Title { get; set; } 
} 

,

  1. Dizinin adını nerede bulabilirim?
  2. Neden aldım, Doğrulama Başarısız Oldu: 1: istek eklenmedi;
  3. İndeksId, ürün için kimliğimdir. Elasticsearch’e bu kimliği kullanmasını nasıl anlarım? Yoksa bir kimlik belirtmeliyim?
+0

neden IndexMany kullanmıyor? –

+1

thanx. Ben şimdi: SPL.Select (I => Client.IndexMany (I, "ürünler")) Ve çalışır. Ancak: IndexId, ürün için kimliğimdir. Elasticsearch’e bu kimliği kullanmasını nasıl anlarım? Yoksa bir kimlik belirtmeliyim? – mrcode

+0

IndexId alanını Kimlik olarak yeniden adlandırın ve elasticsearch bu belgeyi belgenin kimliği olarak kullanır. – Manolis

cevap

5

Önceki sorununuza bakarken, verileri dizine eklemek için IndexMany'i kullanabilirsiniz. Artık yorumda sorduğunuz soruya göre, hangi elastik aramanın kullanılacağını belirtebilirsiniz. Aşağıdaki örneğe bakınız.

ElasticType(IdProperty = "<fieldName>")] 
    public class ClassName 
    { 

Eğer elastik aramada herhangi kimliği belirtmek bir kukla alan dummyId (null) oluşturmak ve "IdProperty" koymak istemiyorsanız. Elastik arama, boş değeri otomatik olarak atar.

Düzenleme: itibaren 2.3 Dan , Onun

[ElasticsearchType(IdProperty = "<fieldName>")] 
+0

Mükemmel. Elasticsearch'te dizine eklemek istemediğim özellikleri işaretlemenin kolay bir yolu var mı? :) – mrcode

+1

@mrcode: evet, lütfen http://stackoverflow.com/questions/23063839/c-sharp-nest-elasticsearch-exclude-object-property-from-being-indexed cevabını kullanın. doğruysa yukarıdaki cevabı işaretleyin –