2015-06-04 64 views
6

我嘗試添加100K產品elasticsearch ElasticSearch,但是當我嘗試,我得到:{ 「驗證失敗:1:沒有要求加入;」}批量插入與NEST

我的代碼:

 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包含此對象的列表:

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. 我在哪裏可以設置索引的名稱?
  2. 爲什麼我得到驗證失敗:1:沒有添加任何請求;?
  3. IndexId是我產品的ID。我如何告訴Elasticsearch使用這個ID?或者我必須指定一個ID?
+0

爲什麼不使用IndexMany? –

+1

thanx。我現在有: SPl.Select(I => Client.IndexMany(I,「products」)) 它的工作原理。但是: IndexId是我的產品ID。我如何告訴Elasticsearch使用這個ID?或者我必須指定一個ID? – mrcode

+0

將IndexId字段重命名爲Id,並且elasticsearch將按慣例將此用作文檔的ID。 – Manolis

回答

5

引用您以前的問題,您可以使用IndexMany爲索引數據。 現在根據您在評論中的問題,您可以指定彈性搜索將使用的ID。看下面的例子。

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

如果你不想指定任何標識彈性搜索,創建一個虛擬場dummyId(可爲空),並把它放在「IdProperty」。彈性搜索將自動爲其分配值,如果它爲空。

編輯: 從2.3開始,它

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

完美。有沒有一種簡單的方法來標記我不想在elasticsearch中編入索引的極其特性? :) – mrcode

+1

@mrcode:是的,請通過答案http://stackoverflow.com/questions/23063839/c-sharp-nest-elasticsearch-exclude-object-property-from-being-indexed。如果它是正確的,則標記上述答案 –