package cmdimport ("context""fmt""github.com/navidrome/navidrome/db""github.com/navidrome/navidrome/log""github.com/spf13/cobra")var searchRebuildForce boolfunc init() {rootCmd.AddCommand(searchRoot)searchRebuildCmd.Flags().BoolVarP(&searchRebuildForce, "force", "f", false, "bypass rebuild confirmation")searchRoot.AddCommand(searchRebuildCmd)}var (searchRoot = &cobra.Command{Use: "search",Short: "Search index maintenance",}searchRebuildCmd = &cobra.Command{Use: "rebuild",Short: "Rebuild the full-text search index",Long: "Drop and rebuild the full-text search index from the library data. Fixes a corrupted " +"or desynced search index without any data loss. Note that 'navidrome doctor' detects a " +"corrupted index, but cannot tell when the index has merely drifted out of sync with the " +"library. This must be done offline",Run: func(cmd *cobra.Command, _ []string) {runSearchRebuild(cmd.Context())},})func runSearchRebuild(ctx context.Context) {requireExistingDB()if !searchRebuildForce && !confirmYES("This will rebuild the search index. Make sure Navidrome is not running.") {log.Warn("Rebuild cancelled")return}fmt.Println("Rebuilding the search index...")err := db.RebuildFTS(ctx, db.Db())db.Close(ctx)if err != nil {log.Fatal("Error rebuilding the search index", err)}fmt.Println("Search index rebuilt successfully.")}