all repos — searchix @ 9f241bff227608dd53a250d012116077dce6dab6

Search engine for NixOS, nix-darwin, home-manager and NUR users

feat: automatically add/remove sources to/from index

Alan Pearce
commit

9f241bff227608dd53a250d012116077dce6dab6

parent

43fe431c3aff36d52a630ca670f9fc4ee161962f

1 file changed, 35 insertions(+), 0 deletions(-)

changed files
M internal/index/indexer.gointernal/index/indexer.go
@@ -7,6 +7,7 @@ "encoding/gob"
"io/fs" "log" "log/slog" + "math" "os" "path" "searchix/internal/file"
@@ -326,3 +327,37 @@ }
return nil } + +func (i *WriteIndex) DeleteBySource(source string) error { + query := bleve.NewTermQuery(source) + search := bleve.NewSearchRequest(query) + search.Size = math.MaxInt + search.Fields = []string{"_id"} + + results, err := i.index.Search(search) + if err != nil { + return errors.WithMessagef(err, "failed to query documents of retired index %s", source) + } + + batch := i.index.NewBatch() + var k uint + for _, hit := range results.Hits { + batch.Delete(hit.ID) + if k++; k%batchSize == 0 { + err := i.Flush(batch) + if err != nil { + return err + } + } + } + err = i.Flush(batch) + if err != nil { + return err + } + + if uint64(search.Size) < results.Total { + return i.DeleteBySource(source) // unlikely :^) + } + + return nil +}