{"record":{"id":"6e275dac2282fdfe","repo":"weaviate/weaviate","slug":"no-classes-to-be-classified-did-you-run-a-previo","errorCode":null,"errorMessage":"no classes to be classified - did you run a previous classification already?","messagePattern":"no classes to be classified - did you run a previous classification already\\?","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"usecases/classification/classifier_run.go","lineNumber":51,"sourceCode":"func (c *Classifier) run(params models.Classification,\n\tfilters Filters,\n) {\n\tctx, cancel := contextWithTimeout(30 * time.Minute)\n\tdefer cancel()\n\n\tgo c.monitorClassification(ctx, cancel, params.Class)\n\n\tc.logBegin(params, filters)\n\tunclassifiedItems, err := c.vectorRepo.GetUnclassified(ctx,\n\t\tparams.Class, params.ClassifyProperties, params.BasedOnProperties, filters.Source())\n\tif err != nil {\n\t\tc.failRunWithError(params, errors.Wrap(err, \"retrieve to-be-classifieds\"))\n\t\treturn\n\t}\n\n\tif len(unclassifiedItems) == 0 {\n\t\tc.failRunWithError(params,\n\t\t\tfmt.Errorf(\"no classes to be classified - did you run a previous classification already?\"))\n\t\treturn\n\t}\n\tc.logItemsFetched(params, unclassifiedItems)\n\n\tclassifyItem, err := c.prepareRun(params, filters, unclassifiedItems)\n\tif err != nil {\n\t\tc.failRunWithError(params, errors.Wrap(err, \"prepare classification\"))\n\t\treturn\n\t}\n\n\tparams, err = c.runItems(ctx, classifyItem, params, filters, unclassifiedItems)\n\tif err != nil {\n\t\tc.failRunWithError(params, err)\n\t\treturn\n\t}\n\n\tc.succeedRun(params)\n}","sourceCodeStart":33,"sourceCodeEnd":69,"githubUrl":"https://github.com/weaviate/weaviate/blob/75aa4b6d11f8818305aafd4440b4e32794f7ca04/usecases/classification/classifier_run.go#L33-L69","documentation":"The classification run aborted because the source/target filters matched zero objects that still need classification. This typically means every candidate already has a classification verdict (or the filters are too restrictive), so there is nothing to do.","triggerScenarios":"POST /v1/classifications where the unclassified-object query returns 0 items — e.g. re-running a completed classification with the same filters, or filters that exclude all objects.","commonSituations":"Re-running the same classification job after it succeeded; source/target where-filters too narrow; waitingForTrueVotes/other settings already satisfied in previous runs; classifyProperties already filled for all matching objects.","solutions":["Broaden or remove the source/target where filters so unclassified objects are included","Check via GraphQL how many objects matching your filters still lack the classifyProperties values","Wait for the previous classification run to complete before re-submitting (it may still be marking objects)","If re-classification is intended, reset/clear the property values or use different filters"],"exampleFix":"// before\ncurl -X POST /v1/classifications -d '{...same params as the completed run...}'\n// after\n// adjust targetWhere to select objects whose property is still empty, or submit new filters\n{\"type\":\"knn\",\"class\":\"Article\",\"classifyProperties\":[\"category\"],\"targetWhere\":{\"path\":[\"category\"],\"operator\":\"IsEmpty\"}}","handlingStrategy":"retry","validationCode":"const still = await graphqlQuery(`{Aggregate{Article{meta{count}}}}`);\n// or query objects missing the classifyProperties before submitting","typeGuard":null,"tryCatchPattern":"try { await startClassification(params); } catch (e) {\n  if (String(e).includes('no classes to be classified')) console.log('nothing left to classify; previous run likely completed');\n}","preventionTips":["Check whether the previous classification run finished before re-submitting","Track classification status via GET /v1/classifications/{id}","Design targetWhere filters to select only unclassified objects"],"tags":["classification","empty-result"],"backgroundTag":"no-objects-to-classify","analyzedSha":"75aa4b6d11f8818305aafd4440b4e32794f7ca04","analyzedAt":"2026-09-04T14:58:20.392Z","contentChangedAt":"2026-09-04T14:58:20.392Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}