dgraph-io/dgraph · error

expected key but found %v

Error message

expected key but found %v

What it means

Error raised by the RDF parser in chunker/rdf_parser.go when a facet key (predicate) is expected but the token found is not a valid key; the offending value is reported via %v. Fix by providing a valid facet predicate name.

Source

Thrown at chunker/rdf_parser.go:273

	}

	return s, nil
}

func parseFacetsRDF(it *lex.ItemIterator, rnq *api.NQuad) error {
	if !it.Next() {
		return errors.New("unexpected end of facets")
	}
	item := it.Item()
	if item.Typ != itemLeftRound {
		return fmt.Errorf("expected '(' but found %v at facet", item.Val)
	}

	for it.Next() { // parse one key value pair
		// parse key
		item = it.Item()
		if item.Typ != itemText {
			return fmt.Errorf("expected key but found %v", item.Val)
		}
		facetKey := strings.TrimSpace(item.Val)
		if len(facetKey) == 0 {
			return errors.New("empty facetKeys not allowed")
		}
		// parse =
		if !it.Next() {
			return errors.New("unexpected end of facets")
		}
		item = it.Item()
		if item.Typ != itemEqual {
			return fmt.Errorf("expected = after facetKey. Found %v", item.Val)
		}
		// parse value or empty value
		if !it.Next() {
			return errors.New("unexpected end of facets")
		}
		item = it.Item()

View on GitHub (pinned to 759e242be6)

Solutions

  1. Ensure each facet pair starts with a bare text key: (score=0.9).
  2. Remove quotes around facet keys.
  3. Reorder pairs so the key precedes '='.

Example fix

// before
"<s> <p> \"v\" (=0.9) ."
// after
"<s> <p> \"v\" (score=0.9) ."
Defensive patterns

Strategy: validation

Validate before calling

func facetPairOK(pair string) bool {
	parts := strings.SplitN(pair, "=", 2)
	return len(parts) == 2 && strings.TrimSpace(parts[0]) != ""
}

Try / catch

if _, err := ParseRDF(line); err != nil {
	if strings.Contains(err.Error(), "expected key but found") {
		return fmt.Errorf("each facet needs a bare text key before '=': %w", err)
	}
	return err
}

Prevention

When it happens

Trigger: ParseRDF input where the first token inside the facet parens is not a text key, e.g. '(=0.9)' with a missing key, or '("score"=0.9)' where quotes produce a different token type.

Common situations: Facet pairs written value-first; keys quoted when they should be bare text; commas or operators mis-tokenized as keys.

Related errors


AI-assisted analysis of dgraph-io/dgraph@759e242be6 (2026-09-01). Data as JSON: /api/errors/60be02055a7b56d5. Report an issue: GitHub.