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