Tencent/WeKnora · error

failed to create op: %w

Error message

failed to create op: %w

What it means

Elasticsearch v8 bulk-save guard: constructing the bulk index operation for an embedding document failed (serialization or client-side op creation error), aborting the batch before it is sent to the cluster.

Source

Thrown at internal/application/repository/retriever/elasticsearch/v8/repository.go:203

func (e *elasticsearchRepository) BatchSave(ctx context.Context,
	embeddingList []*typesLocal.IndexInfo, additionalParams map[string]any,
) error {
	log := logger.GetLogger(ctx)
	if len(embeddingList) == 0 {
		log.Warn("[Elasticsearch] Empty list provided to BatchSave, skipping")
		return nil
	}

	log.Infof("[Elasticsearch] Batch saving %d indices", len(embeddingList))
	indexRequest := e.client.Bulk().Index(e.index)

	// Add each document to the bulk request
	for _, embedding := range embeddingList {
		embeddingDB := elasticsearchRetriever.ToDBVectorEmbedding(embedding, additionalParams)
		err := indexRequest.CreateOp(types.CreateOperation{Index_: &e.index}, embeddingDB)
		if err != nil {
			log.Errorf("[Elasticsearch] Failed to create bulk operation: %v", err)
			return fmt.Errorf("failed to create op: %w", err)
		}
		log.Debugf("[Elasticsearch] Added chunk ID %s to bulk request", embedding.ChunkID)
	}

	// Execute the bulk request
	_, err := indexRequest.Do(ctx)
	if err != nil {
		log.Errorf("[Elasticsearch] Failed to execute bulk operation: %v", err)
		return fmt.Errorf("failed to do bulk: %w", err)
	}

	log.Infof("[Elasticsearch] Successfully batch saved %d indices", len(embeddingList))
	return nil
}

// DeleteByChunkIDList removes documents from the index based on chunk IDs
// Returns an error if the delete operation fails
func (e *elasticsearchRepository) DeleteByChunkIDList(ctx context.Context, chunkIDList []string, dimension int, knowledgeType string) error {

View on GitHub (pinned to 988cbb0330)

Solutions

  1. Inspect the wrapped error for the failing document
  2. Validate embedding payload shape before adding to the bulk request
  3. Retry the batch after removing the problematic document
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at internal/application/repository/retriever/elasticsearch/v8/repository.go:203 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of Tencent/WeKnora@988cbb0330 (2026-09-02). Data as JSON: /api/errors/84c4bf0166ee75ba. Report an issue: GitHub.