about summary refs log tree commit diff stats
path: root/internal/search/indexer.go
diff options
context:
space:
mode:
authorAlan Pearce2024-05-11 14:43:01 +0200
committerAlan Pearce2024-05-11 14:43:01 +0200
commit76f18d677b9b0bb70f701824e715f2ed10aeb8a0 (patch)
tree3ff2dadebde49f2042535c40f5832ebfa93d1b0b /internal/search/indexer.go
parentdbe952d1df63522e5c32b4ef3e59c43886ba9257 (diff)
downloadsearchix-76f18d677b9b0bb70f701824e715f2ed10aeb8a0.tar.lz
searchix-76f18d677b9b0bb70f701824e715f2ed10aeb8a0.tar.zst
searchix-76f18d677b9b0bb70f701824e715f2ed10aeb8a0.zip
feat: version search index mapping schema and warn if outdated
Diffstat (limited to 'internal/search/indexer.go')
-rw-r--r--internal/search/indexer.go34
1 files changed, 29 insertions, 5 deletions
diff --git a/internal/search/indexer.go b/internal/search/indexer.go
index ea262ee..e2e23c2 100644
--- a/internal/search/indexer.go
+++ b/internal/search/indexer.go
@@ -28,6 +28,7 @@ import (
 
 type WriteIndex struct {
 	index bleve.Index
+	meta  *IndexMeta
 }
 
 func createIndexMapping() (mapping.IndexMapping, error) {
@@ -125,9 +126,13 @@ func createIndex(indexPath string) (bleve.Index, error) {
 	return idx, nil
 }
 
-const indexBaseName = "index.bleve"
+const (
+	indexBaseName = "index.bleve"
+	metaBaseName  = "meta.json"
+)
 
 var expectedDataFiles = []string{
+	metaBaseName,
 	indexBaseName,
 	"sources",
 }
@@ -137,6 +142,7 @@ func NewIndexer(dataRoot string, force bool) (*WriteIndex, 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 @@ func NewIndexer(dataRoot string, force bool) (*WriteIndex, error) {
 	}
 
 	var idx bleve.Index
+	var meta *IndexMeta
 	if !exists || force {
 		if force {
 			dir, err := os.ReadDir(dataRoot)
@@ -171,18 +178,35 @@ func NewIndexer(dataRoot string, force bool) (*WriteIndex, error) {
 			}
 		}
 		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
 }