From 6dec2342316aecf4084c8f4efb43f33fbb72892f Mon Sep 17 00:00:00 2001
From: liujiandao <274878379@qq.com>
Date: 星期二, 09 四月 2024 14:07:43 +0800
Subject: [PATCH] 更新计量单位字典
---
pkg/blevex/bleve.go | 106 +++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 82 insertions(+), 24 deletions(-)
diff --git a/pkg/blevex/bleve.go b/pkg/blevex/bleve.go
index 2c06117..9b3e612 100644
--- a/pkg/blevex/bleve.go
+++ b/pkg/blevex/bleve.go
@@ -1,45 +1,38 @@
package blevex
import (
+ "fmt"
"github.com/blevesearch/bleve/v2"
"github.com/blevesearch/bleve/v2/mapping"
- "github.com/yanyiwu/gojieba"
"sync"
+ "time"
)
-// InitAnalyzer 鍔犺浇鑷畾涔夊垎璇嶅櫒锛堢粨宸村垎璇嶏級
+// InitAnalyzer 鍔犺浇鑷畾涔夊垎璇嶅櫒锛坰ego锛�
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
}
@@ -72,23 +65,57 @@
}
return index, err
}
-func Search(indexName string, keyword string) (ids []string, err error) {
+func Search(indexName string, keyword string, from, size int) (ids []string, total uint64, err error) {
index, err := LoadIndex(indexName)
if err != nil {
- return nil, err
+ return
}
- req := bleve.NewSearchRequest(bleve.NewQueryStringQuery(keyword))
+ req := bleve.NewSearchRequest(bleve.NewMatchQuery(keyword))
+ req.From = from
+ req.Size = size
res, err := index.Search(req)
if err != nil {
- panic(err)
+ return nil, 0, err
}
- if res == nil || res.Total == 0 {
- return ids, nil
+ if res == nil {
+ return
}
for _, ret := range dealResult(res) {
ids = append(ids, ret.Id)
}
- return ids, nil
+ return ids, res.Total, nil
+}
+
+func ComplexSearch(indexName string, keyword string, conditions map[string]interface{}, from, size int) (ids []string, total uint64, err error) {
+ index, err := LoadIndex(indexName)
+ if err != nil {
+ return nil, 0, err
+ }
+
+ // Create a boolean query with a should clause for fuzzy search
+ boolQuery := bleve.NewBooleanQuery()
+ fuzzyQuery := bleve.NewMatchQuery(keyword)
+ boolQuery.AddMust(fuzzyQuery)
+
+ // Add a must clause for category filtering
+ for key, val := range conditions {
+ query := bleve.NewQueryStringQuery(fmt.Sprintf("%v:%v", key, val))
+ boolQuery.AddMust(query)
+ }
+ req := bleve.NewSearchRequest(boolQuery)
+ req.From = from
+ req.Size = size
+ res, err := index.Search(req)
+ if err != nil {
+ return nil, 0, err
+ }
+ if res == nil {
+ return
+ }
+ for _, ret := range dealResult(res) {
+ ids = append(ids, ret.Id)
+ }
+ return ids, res.Total, nil
}
type Result struct {
@@ -103,3 +130,34 @@
}
return results
}
+
+func TimeSearch(indexName string, t time.Time, conditions map[string]interface{}, from, size int) (ids []string, total uint64, err error) {
+ index, err := LoadIndex(indexName)
+ if err != nil {
+ return nil, 0, err
+ }
+ startDate := t
+ endDate := t.Add(time.Hour * 24).Add(-time.Second * 1)
+ timeRangeQuery := bleve.NewDateRangeQuery(startDate, endDate)
+ boolQuery := bleve.NewBooleanQuery()
+ boolQuery.AddMust(timeRangeQuery)
+ for key, val := range conditions {
+ query := bleve.NewQueryStringQuery(fmt.Sprintf("%v:%v", key, val))
+ boolQuery.AddMust(query)
+ }
+
+ req := bleve.NewSearchRequest(boolQuery)
+ req.From = from
+ req.Size = size
+ res, err := index.Search(req)
+ if err != nil {
+ return nil, 0, err
+ }
+ if res == nil {
+ return
+ }
+ for _, ret := range dealResult(res) {
+ ids = append(ids, ret.Id)
+ }
+ return ids, res.Total, nil
+}
--
Gitblit v1.8.0