diff --git a/internal/postgres/insert_module.go b/internal/postgres/insert_module.go
index 49fbda6..073ab41 100644
--- a/internal/postgres/insert_module.go
+++ b/internal/postgres/insert_module.go
@@ -637,13 +637,14 @@
 	return db.BulkUpsert(ctx, "readmes", readmeCols, readmeValues, []string{"unit_id"})
 }
 
-// ReInsertLatestVersion checks that the latest good version matches the version
-// in search_documents. If it doesn't, it inserts the latest good version into
-// search_documents and imports_unique.
-// The version and status arguments should come from the module currently being fetched.
-// They are used to determine if the module is alternative.
-func (db *DB) ReInsertLatestVersion(ctx context.Context, modulePath, version string, status int) (err error) {
-	defer derrors.WrapStack(&err, "ReInsertLatestVersion(%q)", modulePath)
+// ReconcileSearch reconciles the search data for modulePath. If the module is
+// alternative or has no good versions, it removes search data. Otherwise, if
+// the latest good version doesn't match the version in search_documents, and it
+// inserts the latest good version into search_documents and imports_unique.
+// The version and status arguments should come from the module currently being
+// fetched. They are used to determine if the module is alternative.
+func (db *DB) ReconcileSearch(ctx context.Context, modulePath, version string, status int) (err error) {
+	defer derrors.WrapStack(&err, "ReconcileSearch(%q)", modulePath)
 
 	return db.db.Transact(ctx, sql.LevelRepeatableRead, func(tx *database.DB) error {
 		// Hold the lock on the module path throughout.
@@ -656,12 +657,12 @@
 			return err
 		}
 		if lmv == nil {
-			log.Debugf(ctx, "ReInsertLatestVersion(%q): no latest-version info", modulePath)
+			log.Debugf(ctx, "ReconcileSearch(%q): no latest-version info", modulePath)
 			return nil
 		}
 		// Determine if this is an alternative module. The
 		// isAlternativeModulePath function checks the DB, but at the time
-		// ReInsertLatestVersion is called, we haven't added the current module
+		// ReconcileSearch is called, we haven't added the current module
 		// version's status to the DB, so we use the version and status
 		// arguments.
 		alt := version == lmv.CookedVersion && status == derrors.ToStatus(derrors.AlternativeModule)
@@ -681,7 +682,7 @@
 			if err := deleteModuleFromImportsUnique(ctx, tx, modulePath); err != nil {
 				return err
 			}
-			log.Debugf(ctx, "ReInsertLatestVersion(%q): alternative or no good version; removed from search_documents and imports_unique", modulePath)
+			log.Debugf(ctx, "ReconcileSearch(%q): alternative or no good version; removed from search_documents and imports_unique", modulePath)
 			return nil
 		}
 		// Is the latest good version in search_documents?
@@ -695,7 +696,7 @@
 		case sql.ErrNoRows:
 			break
 		case nil:
-			log.Debugf(ctx, "ReInsertLatestVersion(%q): good version %s found in search_documents; doing nothing",
+			log.Debugf(ctx, "ReconcileSearch(%q): good version %s found in search_documents; doing nothing",
 				modulePath, lmv.GoodVersion)
 			return nil
 		default:
@@ -755,7 +756,7 @@
 			return err
 		}
 
-		log.Debugf(ctx, "ReInsertLatestVersion(%q): re-inserted at latest good version %s", modulePath, lmv.GoodVersion)
+		log.Debugf(ctx, "ReconcileSearch(%q): re-inserted at latest good version %s", modulePath, lmv.GoodVersion)
 		return nil
 	})
 }
diff --git a/internal/postgres/insert_module_test.go b/internal/postgres/insert_module_test.go
index 2f5fbac..42510ee 100644
--- a/internal/postgres/insert_module_test.go
+++ b/internal/postgres/insert_module_test.go
@@ -615,7 +615,7 @@
 	}
 }
 
-func TestReInsertLatestVersion(t *testing.T) {
+func TestReconcileSearch(t *testing.T) {
 	testDB, release := acquire(t)
 	defer release()
 	ctx := context.Background()
@@ -640,7 +640,7 @@
 		}); err != nil {
 			t.Fatal(err)
 		}
-		if err := testDB.ReInsertLatestVersion(ctx, modulePath, version, status); err != nil {
+		if err := testDB.ReconcileSearch(ctx, modulePath, version, status); err != nil {
 			t.Fatal(err)
 		}
 	}
diff --git a/internal/postgres/search.go b/internal/postgres/search.go
index 0b70397..d6cc887 100644
--- a/internal/postgres/search.go
+++ b/internal/postgres/search.go
@@ -749,7 +749,7 @@
 	defer derrors.WrapStack(&err, "DB.UpsertSearchDocument(ctx, ddb, %q, %q)", args.PackagePath, args.ModulePath)
 
 	// Only summarize the README if the package and module have the same path.
-	// If this changes, fix DB.ReInsertLatestVersion.
+	// If this changes, fix DB.ReconcileSearch.
 	if args.PackagePath != args.ModulePath {
 		args.ReadmeFilePath = ""
 		args.ReadmeContents = ""
diff --git a/internal/worker/fetch.go b/internal/worker/fetch.go
index 8d74be0..3dc44d1 100644
--- a/internal/worker/fetch.go
+++ b/internal/worker/fetch.go
@@ -117,7 +117,7 @@
 
 	// Make sure the latest version of the module is the one in search_documents
 	// and imports_unique.
-	if err := f.DB.ReInsertLatestVersion(ctx, modulePath, ft.ResolvedVersion, ft.Status); err != nil {
+	if err := f.DB.ReconcileSearch(ctx, modulePath, ft.ResolvedVersion, ft.Status); err != nil {
 		log.Error(ctx, err)
 		if ft.Status != http.StatusInternalServerError {
 			ft.Error = err
