2015-06-04 4 views
6

Я пытаюсь добавить 100k продукты в elasticsearch, но когда я пытаюсь я получаю: { "Не удалось выполнить проверку: 1: без добавления каких-либо запросов;"}Массовая вставка в ElasticSearch с 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 - это мой идентификатор продукта. Как я могу сказать Elasticsearch, чтобы использовать этот идентификатор? Или я должен указать идентификатор?
+0

почему не использовать IndexMany? –

+1

thanx. У меня теперь есть: SPl.Select (I => Client.IndexMany (I, "products")) И он работает. Но: IndexId - это мой идентификатор продукта. Как я могу сказать Elasticsearch, чтобы использовать этот идентификатор? Или я должен указать идентификатор? – mrcode

+0

Переименуйте поле IndexId в Id и elasticsearch, используя это в качестве идентификатора документа. – Manolis

ответ

5

Ссылаясь на вашу предыдущую проблему, вы можете использовать IndexMany для индексирования данных. Теперь, согласно вашему вопросу в комментарии, вы можете указать идентификатор, который будет использоваться для поиска эластичности. см. приведенный ниже пример.

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

если вы не хотите, чтобы указать любой идентификатор упругого поиска, создания фиктивного поля dummyId (обнуляемым) и поместить его в «IdProperty». Упругий поиск автоматически присваивает ему значение, если оно равно нулю.

Edit: С 2,3 года, Его

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

Perfect. Есть ли простой способ отметить, какие свойства я не хочу индексировать в elasticsearch? :) – mrcode

+1

@mrcode: да, пожалуйста, просмотрите ответ http://stackoverflow.com/questions/23063839/c-sharp-nest-elasticsearch-exclude-object-property-from-being-indexed. отметьте вышеприведенный ответ, если он верен –

 Смежные вопросы

  • Нет связанных вопросов^_^