2015-06-04 67 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。如果它是正确的,则标记上述答案 –