From 73b6baf6af3d88cdcb0e2df7932a9bd96b0b85c5 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期一, 01 七月 2024 22:32:34 +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