diff options
author | Alan Pearce | 2024-05-09 18:39:45 +0200 |
---|---|---|
committer | Alan Pearce | 2024-05-09 19:27:57 +0200 |
commit | 778e1d774f574f45c179d0fecf0c1da9cc359b80 (patch) | |
tree | 51d7a2c1fa6c29dc3782c10c7df40545ef694710 | |
parent | 99d5507b223baa6c780707d32c7bbbb8611034f0 (diff) | |
download | searchix-778e1d774f574f45c179d0fecf0c1da9cc359b80.tar.lz searchix-778e1d774f574f45c179d0fecf0c1da9cc359b80.tar.zst searchix-778e1d774f574f45c179d0fecf0c1da9cc359b80.zip |
feat(importer): add --replace flag to overwrite existing index
-rw-r--r-- | import/main.go | 5 | ||||
-rw-r--r-- | internal/search/indexer.go | 18 |
2 files changed, 20 insertions, 3 deletions
diff --git a/import/main.go b/import/main.go index 87f8e4d..52b4515 100644 --- a/import/main.go +++ b/import/main.go @@ -22,6 +22,7 @@ const timeout = 30 * time.Minute type Config struct { ConfigFile string `conf:"short:c"` LogLevel slog.Level `conf:"default:INFO"` + Replace bool `conf:"default:false,help:whether to remove existing database, if exists"` } func main() { @@ -50,7 +51,7 @@ func main() { return } - indexer, err := search.NewIndexer(cfg.DataPath) + indexer, err := search.NewIndexer(cfg.DataPath, runtimeConfig.Replace) if err != nil { log.Fatalf("Failed to create indexer: %v", err) } @@ -93,7 +94,7 @@ func main() { } logger.Info("importer fetch succeeded", "updated", updated) - if updated { + if updated || runtimeConfig.Replace { hadWarnings, err := imp.Import(ctx, indexer) if err != nil { diff --git a/internal/search/indexer.go b/internal/search/indexer.go index b0e57d4..fc0214b 100644 --- a/internal/search/indexer.go +++ b/internal/search/indexer.go @@ -6,7 +6,9 @@ import ( "encoding/gob" "log" "log/slog" + "os" "path" + "searchix/internal/file" "searchix/internal/options" "github.com/blevesearch/bleve/v2" @@ -27,12 +29,26 @@ type WriteIndex struct { indexMapping *mapping.IndexMappingImpl } -func NewIndexer(dir string) (*WriteIndex, error) { +func NewIndexer(dir string, force bool) (*WriteIndex, error) { var err error bleve.SetLog(log.Default()) indexPath := path.Join(dir, indexFilename) + exists, err := file.Exists(indexPath) + if err != nil { + return nil, errors.WithMessagef(err, "could not check if index exists at path %s", indexPath) + } + if exists { + if !force { + return nil, errors.Errorf("index file %s already exists (use --force to replace)", indexPath) + } + err := os.RemoveAll(indexPath) + if err != nil { + return nil, errors.WithMessagef(err, "could not remove index file %s", indexPath) + } + } + indexMapping := bleve.NewIndexMapping() indexMapping.StoreDynamic = false indexMapping.IndexDynamic = false |