40 lines
910 B
Go
40 lines
910 B
Go
|
|
package search
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"fmt"
|
|||
|
|
"github.com/blevesearch/bleve/v2"
|
|||
|
|
"log"
|
|||
|
|
"os"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// 初始化索引(程序启动时调用一次)
|
|||
|
|
func InitIndex() error {
|
|||
|
|
// 检查索引目录是否存在(Bleve v2 方式)
|
|||
|
|
_, err := os.Stat("data")
|
|||
|
|
exists := !os.IsNotExist(err)
|
|||
|
|
if err != nil && !os.IsNotExist(err) {
|
|||
|
|
// 除了"不存在"之外的其他错误(如权限问题)
|
|||
|
|
return fmt.Errorf("检查索引目录失败: %v", err)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if exists {
|
|||
|
|
// 打开已有索引
|
|||
|
|
globalIndex, err = bleve.Open("data")
|
|||
|
|
if err != nil {
|
|||
|
|
return fmt.Errorf("打开索引失败: %v", err)
|
|||
|
|
}
|
|||
|
|
log.Println("成功打开已有索引")
|
|||
|
|
} else {
|
|||
|
|
// 创建新索引
|
|||
|
|
mapping := bleve.NewIndexMapping()
|
|||
|
|
globalIndex, err = bleve.New("data", mapping)
|
|||
|
|
if err != nil {
|
|||
|
|
return fmt.Errorf("创建索引失败: %v", err)
|
|||
|
|
}
|
|||
|
|
log.Println("成功创建新索引")
|
|||
|
|
|
|||
|
|
// 初始化文档(略)
|
|||
|
|
}
|
|||
|
|
return nil
|
|||
|
|
}
|