{"record":{"id":"3f32d3ecc89a9d65","repo":"cayleygraph/cayley","slug":"no-indexes-defined","errorCode":null,"errorMessage":"no indexes defined","messagePattern":"no indexes defined","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"graph/kv/indexing.go","lineNumber":826,"sourceCode":"\t}\n\tqs.indexes.Lock()\n\tdefer qs.indexes.Unlock()\n\tif len(qs.indexes.exists) != 0 {\n\t\treturn qs.indexes.exists, nil\n\t}\n\tfor _, in := range qs.indexes.all {\n\t\tif in.Unique {\n\t\t\tif clog.V(2) {\n\t\t\t\tclog.Infof(\"using unique index: %v\", in.Dirs)\n\t\t\t}\n\t\t\tqs.indexes.exists = []QuadIndex{in}\n\t\t\treturn qs.indexes.exists, nil\n\t\t}\n\t}\n\t// TODO: find best combination of indexes\n\tinds := qs.indexes.all\n\tif len(inds) == 0 {\n\t\treturn nil, fmt.Errorf(\"no indexes defined\")\n\t}\n\tif clog.V(2) {\n\t\tclog.Infof(\"using index intersection: %v\", inds)\n\t}\n\tqs.indexes.exists = inds\n\treturn qs.indexes.exists, nil\n}\n\nfunc hasDir(dirs []quad.Direction, d quad.Direction) bool {\n\tfor _, d2 := range dirs {\n\t\tif d == d2 {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc (qs *QuadStore) bestIndexes(dirs []quad.Direction) []QuadIndex {","sourceCodeStart":808,"sourceCodeEnd":844,"githubUrl":"https://github.com/cayleygraph/cayley/blob/81dcd7d73e45136bc0d01802a8ba4685d8a533eb/graph/kv/indexing.go#L808-L844","documentation":"bestUnique computes an index combination for existence checks by intersecting available indexes. If qs.indexes.all is empty — no indexes are registered on the store — it returns \"no indexes defined\" instead of an intersection plan. This indicates the store was opened without index metadata being initialized.","triggerScenarios":"hasPrimitive-driven lookups on a kv QuadStore whose indexes.all slice is empty because index metadata was never written or was loaded as empty/corrupt at open time.","commonSituations":"Querying a store that failed index initialization at startup; custom/legacy database directory without index metadata; a bug or interrupted initialization that left the store with zero indexes.","solutions":["Re-initialize/reindex the store so index metadata is created before running queries.","Check startup logs for earlier indexing errors (e.g. 'cannot decode indexes') that left the index set empty, and fix the root cause.","Verify the database directory belongs to the same Cayley version/format; migrate via export/import if not.","If the directory is disposable, recreate it with cayley init and reload data."],"exampleFix":"// before: querying a never-indexed directory\ncayley query 'g.V().Has(...)' // no indexes defined\n// after\ncayley init --store /path/db && cayley load --store /path/db --files data.nq\ncayley query 'g.V().Has(...)'","handlingStrategy":"validation","validationCode":"if len(qs.indexes.all) == 0 {\n    return fmt.Errorf(\"store has no indexes; run indexing before queries\")\n}","typeGuard":null,"tryCatchPattern":"res, err := qs.hasPrimitive(...)\nif err != nil && err.Error() == \"no indexes defined\" {\n    return fmt.Errorf(\"re-initialize store: cayley init + reindex required\")\n}","preventionTips":["Always initialize stores with cayley init before loading/querying.","Watch startup logs for index initialization failures and abort startup if indexes are empty.","Keep data directories version-consistent; migrate via export/import instead of opening in-place across formats."],"tags":["kv-store","indexing","initialization"],"backgroundTag":"missing-required-config","analyzedSha":"81dcd7d73e45136bc0d01802a8ba4685d8a533eb","analyzedAt":"2026-09-06T06:14:12.358Z","contentChangedAt":"2026-09-06T06:14:12.358Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}