dgraph-io/dgraph · error

empty facetKeys not allowed

Error message

empty facetKeys not allowed

What it means

Returned by parseFacetsRDF while parsing the facet list of an RDF N-Quad: after trimming whitespace, a facet key parsed between '(' and '=' was empty (e.g. '(=value)' or a key made only of spaces). Facet keys must be non-empty strings.

Source

Thrown at chunker/rdf_parser.go:277

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()
		facetVal := ""
		if item.Typ == itemText {
			facetVal = item.Val
		}

View on GitHub (pinned to 759e242be6)

Solutions

  1. Give the facet a non-empty key: (score=0.9).
  2. Fix the generator/template so facet keys are always populated.
  3. Pre-validate facet pairs client-side, trimming keys and rejecting empties.

Example fix

// before
fmt.Sprintf("(<s-key>%s=0.9)", facetKey)  // facetKey == ""
// after
if facetKey == "" { return errors.New("facet key required") }
fmt.Sprintf("(%s=0.9)", facetKey)
Defensive patterns

Strategy: validation

Validate before calling

func facetKeysValid(facets map[string]string) bool {
	for k := range facets {
		if strings.TrimSpace(k) == "" { return false }
	}
	return true
}

Try / catch

if _, err := ParseRDF(line); err != nil {
	if err.Error() == "empty facetKeys not allowed" {
		return fmt.Errorf("facet key placeholder not filled: %w", err)
	}
	return err
}

Prevention

When it happens

Trigger: ParseRDF input where a facet pair's key trims to empty, e.g. '( =0.9)' or a key consisting solely of spaces produced by a generator.

Common situations: Templated facet lists where the key placeholder was empty; whitespace-heavy formatting that separated '=' from a missing key.

Related errors


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