2015-06-04 12 views
6

próbuję dodać 100k produkty elasticsearch, ale gdy próbuję uzyskać: { "Validation Failed: 1: brak żądania dodanej;"}Luzem wkładka do ElasticSearch z NEST

Mój kod:

 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 zawiera listę obiektu:

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

Więc

  1. Gdzie mogę ustawić nazwę indeksu?
  2. Dlaczego otrzymałem, Niepowodzenie sprawdzania poprawności: 1: brak dodanych żądań ;?
  3. IndexId to mój identyfikator produktu. Jak mogę powiedzieć Elasticsearch, aby używał tego identyfikatora? Czy muszę podać identyfikator?
+0

dlaczego nie używając IndexMany? –

+1

thanx. Mam teraz: SPl.Selekt (I => Klient.IndexMany (I, "produkty")) I działa. Ale: IndexId to mój identyfikator produktu. Jak mogę powiedzieć Elasticsearch, aby używał tego identyfikatora? Czy muszę podać identyfikator? – mrcode

+0

Zmień nazwę pola IndexId na Id, a elasticsearch użyje tej konwencji zgodnie z konwencją jako id dokumentu. – Manolis

Odpowiedz

5

Odnosząc się do poprzedniego problemu, można użyć IndexMany do indeksowania danych. Teraz, jak w pytaniu w komentarzu, możesz podać identyfikator, którego będzie używać wyszukiwanie elastyczne. zobacz poniższy przykład.

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

jeśli nie chcesz, aby określić dowolny identyfikator elastycznego wyszukiwania, stworzyć atrapę pole dummyId (pustych) i umieścić go w „IdProperty”. Wyszukiwanie elastyczne automatycznie przydzieli wartość, jeśli jest zerowa.

Edit: od 2,3 roku, jego

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

Perfect. Czy istnieje łatwy sposób na zaznaczenie właściwości, których nie chcę indeksować w elastycznym wyszukiwaniu? :) – mrcode

+1

@mrcode: tak, proszę przejść przez odpowiedź http://stackoverflow.com/questions/23063839/c-sharp-nest-elasticsearch-exclude-object-property-from-being-indexed. zaznacz powyższą odpowiedź, jeśli jest prawidłowa –

Powiązane problemy