Rebuild search index in admin options (#647)
Signed-off-by: Thomas Miceli <tho.miceli@gmail.com>
This commit is contained in:
@@ -2,6 +2,8 @@ package index
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
|
||||
"github.com/blevesearch/bleve/v2"
|
||||
@@ -82,6 +84,15 @@ func (i *BleveIndexer) open() (bleve.Index, error) {
|
||||
return bleve.New(i.path, mapping)
|
||||
}
|
||||
|
||||
func (i *BleveIndexer) Reset() error {
|
||||
i.Close()
|
||||
if err := os.RemoveAll(i.path); err != nil {
|
||||
return fmt.Errorf("failed to remove Bleve index directory: %w", err)
|
||||
}
|
||||
log.Info().Msg("Bleve index directory removed, re-creating index")
|
||||
return i.Init()
|
||||
}
|
||||
|
||||
func (i *BleveIndexer) Close() {
|
||||
if i == nil || i.index == nil {
|
||||
return
|
||||
|
||||
@@ -2,10 +2,11 @@ package index
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/rs/zerolog/log"
|
||||
"github.com/thomiceli/opengist/internal/config"
|
||||
"path/filepath"
|
||||
"sync/atomic"
|
||||
|
||||
"github.com/rs/zerolog/log"
|
||||
"github.com/thomiceli/opengist/internal/config"
|
||||
)
|
||||
|
||||
var atomicIndexer atomic.Pointer[Indexer]
|
||||
@@ -13,6 +14,7 @@ var atomicIndexer atomic.Pointer[Indexer]
|
||||
type Indexer interface {
|
||||
Init() error
|
||||
Close()
|
||||
Reset() error
|
||||
Add(gist *Gist) error
|
||||
Remove(gistID uint) error
|
||||
Search(query string, metadata SearchGistMetadata, userId uint, page int) ([]uint, uint64, map[string]int, error)
|
||||
@@ -84,6 +86,19 @@ func Close() {
|
||||
atomicIndexer.Store(nil)
|
||||
}
|
||||
|
||||
func ResetIndex() error {
|
||||
if !IndexEnabled() {
|
||||
return nil
|
||||
}
|
||||
|
||||
idx := atomicIndexer.Load()
|
||||
if idx == nil {
|
||||
return fmt.Errorf("indexer is not initialized")
|
||||
}
|
||||
|
||||
return (*idx).Reset()
|
||||
}
|
||||
|
||||
func AddInIndex(gist *Gist) error {
|
||||
if !IndexEnabled() {
|
||||
return nil
|
||||
|
||||
@@ -72,6 +72,21 @@ func (i *MeiliIndexer) open() (meilisearch.IndexManager, error) {
|
||||
return i.client.Index(i.indexName), nil
|
||||
}
|
||||
|
||||
func (i *MeiliIndexer) Reset() error {
|
||||
if i.client != nil {
|
||||
taskInfo, err := i.client.DeleteIndex(i.indexName)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to delete Meilisearch index: %w", err)
|
||||
}
|
||||
_, err = i.client.WaitForTask(taskInfo.TaskUID, 0)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to wait for Meilisearch index deletion: %w", err)
|
||||
}
|
||||
log.Info().Msg("Meilisearch index deleted, re-creating index")
|
||||
}
|
||||
return i.Init()
|
||||
}
|
||||
|
||||
func (i *MeiliIndexer) Close() {
|
||||
if i.client != nil {
|
||||
i.client.Close()
|
||||
|
||||
Reference in New Issue
Block a user