all repos — searchix @ 76f18d677b9b0bb70f701824e715f2ed10aeb8a0

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

feat: version search index mapping schema and warn if outdated

Alan Pearce
commit

76f18d677b9b0bb70f701824e715f2ed10aeb8a0

parent

dbe952d1df63522e5c32b4ef3e59c43886ba9257

1 file changed, 29 insertions(+), 5 deletions(-)

changed files
M internal/search/indexer.gointernal/search/indexer.go
@@ -28,6 +28,7 @@ )
type WriteIndex struct { index bleve.Index + meta *IndexMeta } func createIndexMapping() (mapping.IndexMapping, error) {
@@ -125,9 +126,13 @@
return idx, nil } -const indexBaseName = "index.bleve" +const ( + indexBaseName = "index.bleve" + metaBaseName = "meta.json" +) var expectedDataFiles = []string{ + metaBaseName, indexBaseName, "sources", }
@@ -137,6 +142,7 @@ var err error
bleve.SetLog(log.Default()) indexPath := path.Join(dataRoot, indexBaseName) + metaPath := path.Join(dataRoot, metaBaseName) exists, err := file.Exists(indexPath) if err != nil {
@@ -148,6 +154,7 @@ )
} var idx bleve.Index + var meta *IndexMeta if !exists || force { if force { dir, err := os.ReadDir(dataRoot)
@@ -171,18 +178,35 @@ return nil, errors.WithMessagef(err, "could not remove index file %s", indexPath)
} } idx, err = createIndex(indexPath) + if err != nil { + return nil, err + } + + meta, err = createMeta(metaPath) + if err != nil { + return nil, err + } + + err = meta.Save() + if err != nil { + return nil, err + } } else { idx, err = bleve.Open(indexPath) if err != nil { - err = errors.WithMessagef(err, "could not open index at path %s", indexPath) + return nil, errors.WithMessagef(err, "could not open index at path %s", indexPath) } - } - if err != nil { - return nil, err + + meta, err = openMeta(metaPath) + if err != nil { + return nil, err + } + } return &WriteIndex{ idx, + meta, }, nil }