簡體   English   中英

在 elasticsearch Olivere Package 中插入批量數據失敗

[英]Failed to insert bulk data in elasticsearch Olivere Package

我正在嘗試插入批量數據。 除了響應屬性錯誤之外,我沒有收到任何錯誤:true。 這是我的代碼片段。

func BulkInsert(ctx context.Context, products []model.Pt) error {
    Counter++
    // create new bulk processor from client
    bulkProcessor, err := ElasticVar.BulkProcessor().
        Name("Bulk Worker 1").
        Workers(5).
        BulkActions(1000).
        BulkSize(2 << 20).
        FlushInterval(1 * time.Second).
        Stats(true).
        After(after).
        Do(context.Background())
    if err != nil {
        log.Println("NewBulkProcessorService err", err)
        return err
    }
    defer bulkProcessor.Close()
    storeIds := map[string]string{}
    // Enqueue the document
    for _, product := range products {
        if _, ok := storeIds[product.Id]; ok {
            continue
        } else {
            storeIds[product.StoreId] = product.StoreId
        }

        dataJSON, err := json.Marshal(product)
        if err != nil {
            // Look up the failed documents with res.Failed(), and e.g. recommit
            log.Println("elastic marshal failed", err)
            return errors.New("elastic marshal failed")
        }
        bulkProcessor.Add(elastic.NewBulkIndexRequest().
            OpType("index").
            Index(Index).
            Type(Type).
            Id(product.Id).
            Doc(string(dataJSON)))
    }
    stats := bulkProcessor.Stats()
    fmt.Printf("Number of times flush has been invoked: %d\n", stats.Flushed)
    fmt.Printf("Number of times workers committed reqs: %d\n", stats.Committed)
    fmt.Printf("Number of requests indexed            : %d\n", stats.Indexed)
    fmt.Printf("Number of requests reported as created: %d\n", stats.Created)
    fmt.Printf("Number of requests reported as updated: %d\n", stats.Updated)
    fmt.Printf("Number of requests reported as success: %d\n", stats.Succeeded)
    fmt.Printf("Number of requests reported as failed : %d\n", stats.Failed)
    fmt.Printf("\n\n")
    for i, w := range stats.Workers {
        fmt.Printf("Worker %d: Number of requests queued: %d\n", i, w.Queued)
        fmt.Printf("           Last response time       : %v\n", w.LastDuration)
    }
    fmt.Printf(`Inserted Count: %d`, Counter)
    return nil
}

func after(executionID int64, requests []elastic.BulkableRequest, response *elastic.BulkResponse, err error) {
    if err != nil {
        log.Printf("bulk commit failed, err: %v\n", err)
    }
    // do what ever you want in case bulk commit success
    log.Printf("commit response=%v\n", response.Errors)
    log.Printf("commit successfully, len(requests)=%d\n", len(requests))
}

我正在批量添加所有數據。

在響應后的回調中。 錯誤是真的。 當我查詢數據時。 沒有插入任何記錄。 請幫忙。

我能夠通過創建的方法訪問錯誤字符串來調試它

for _, info := range response.Created() {
    fmt.Println("nBulk response created error:", info.Error)
    fmt.Println("nBulk response created: error reason4", info.Error.Reason)
    fmt.Println("nBulk response IndexProduct:", info.IndexProduct)
}

問題是我通過 Type = "product" 而不是 Type = "doc"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM