zhangqian
2023-11-29 d1cb09e7a23e7221b6c090ad33e4481a5b79f615
pkg/blevex/bleve.go
@@ -4,43 +4,34 @@
   "fmt"
   "github.com/blevesearch/bleve/v2"
   "github.com/blevesearch/bleve/v2/mapping"
   "github.com/yanyiwu/gojieba"
   "sync"
)
// InitAnalyzer 加载自定义分词器(结巴分词)
// InitAnalyzer 加载自定义分词器(sego)
var defaultAnalyzer *mapping.IndexMappingImpl
func InitAnalyzer() {
   indexMapping := bleve.NewIndexMapping()
   //os.RemoveAll(IndexDir)
   //// clean index when example finished
   //defer os.RemoveAll(IndexDir)
   err := indexMapping.AddCustomTokenizer("gojieba",
   err := indexMapping.AddCustomTokenizer("sego",
      map[string]interface{}{
         "dictpath":     gojieba.DICT_PATH,
         "hmmpath":      gojieba.HMM_PATH,
         "userdictpath": gojieba.USER_DICT_PATH,
         "idf":          gojieba.IDF_PATH,
         "stop_words":   gojieba.STOP_WORDS_PATH,
         "type":         "gojieba",
         "dictpath": "conf/dictionary.txt", // 替换为实际的字典路径
         "type":     "sego",
      },
   )
   if err != nil {
      panic(err)
   }
   err = indexMapping.AddCustomAnalyzer("gojieba",
   err = indexMapping.AddCustomAnalyzer("sego",
      map[string]interface{}{
         "type":      "gojieba",
         "tokenizer": "gojieba",
         "type":      "sego",
         "tokenizer": "sego",
      },
   )
   if err != nil {
      panic(err)
   }
   indexMapping.DefaultAnalyzer = "gojieba"
   indexMapping.DefaultAnalyzer = "sego"
   defaultAnalyzer = indexMapping
}
@@ -78,7 +69,7 @@
   if err != nil {
      return
   }
   req := bleve.NewSearchRequest(bleve.NewQueryStringQuery(keyword))
   req := bleve.NewSearchRequest(bleve.NewMatchQuery(keyword))
   req.From = from
   req.Size = size
   res, err := index.Search(req)
@@ -102,15 +93,12 @@
   // Create a boolean query with a should clause for fuzzy search
   boolQuery := bleve.NewBooleanQuery()
   fuzzyQuery := bleve.NewFuzzyQuery(keyword)
   fuzzyQuery.SetFuzziness(2) // Set the fuzziness level as needed
   boolQuery.AddShould(fuzzyQuery)
   fuzzyQuery := bleve.NewMatchQuery(keyword)
   boolQuery.AddMust(fuzzyQuery)
   // Add a must clause for category filtering
   for key, val := range conditions {
      query := bleve.NewQueryStringQuery(fmt.Sprintf("%s:%s", key, val))
      query := bleve.NewQueryStringQuery(fmt.Sprintf("%v:%v", key, val))
      boolQuery.AddMust(query)
   }
   req := bleve.NewSearchRequest(boolQuery)