8

エラスティックサーチに 10 万個の製品を追加しようとしましたが、次のようになりました: {"検証に失敗しました: 1: リクエストが追加されませんでした;"}

私のコード:

        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. Validation Failed: 1: no requests added; が表示されたのはなぜですか?
  3. IndexId は製品の ID です。この ID を使用するよう Elasticsearch に指示するにはどうすればよいですか? それともIDを指定する必要がありますか?
4

1 に答える 1

7

以前の問題を参照すると、データのインデックス作成に IndexMany を使用できます。コメントの質問に従って、エラスティック検索が使用する ID を指定できます。以下の例を参照してください。

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

エラスティックサーチにIDを指定したくない場合は、ダミーフィールドのdummyId(nullable)を作成し、「IdProperty」に入れます。エラスティック検索は、null の場合に値を自動的に割り当てます。

編集:2.3以降、その

[ElasticsearchType(IdProperty = "<fieldName>")]
于 2015-06-05T10:39:05.850 に答える