From 451f8975b21ee70828373b4db36a4d3787edadce Mon Sep 17 00:00:00 2001 From: gotoeasy Date: Fri, 22 Sep 2023 13:33:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E5=BF=97=E7=BA=A7=E5=88=AB=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=E6=94=AF=E6=8C=81=E5=A4=9A=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- glc/ldb/engine.go | 4 ++-- glc/ldb/engine_test.go | 2 +- glc/ldb/search/search_keys.go | 24 +++++++++++++++----- glc/www/controller/log_search_controller.go | 14 ++++++++---- glc/www/web/src/views/glc/search/GlcMain.vue | 8 +++---- 5 files changed, 35 insertions(+), 17 deletions(-) diff --git a/glc/ldb/engine.go b/glc/ldb/engine.go index c0332a9..855ed74 100644 --- a/glc/ldb/engine.go +++ b/glc/ldb/engine.go @@ -48,7 +48,7 @@ func (e *Engine) AddLogDataModel(data *logdata.LogDataModel) { e.logStorage.AddLogDataModel(data) } -func (e *Engine) Search(searchKey string, system string, minDatetime string, maxDatetime string, loglevel string, +func (e *Engine) Search(searchKey string, system string, minDatetime string, maxDatetime string, loglevel string, loglevels []string, currentDocId uint32, forward bool) *search.SearchResult { // 分词后检索 @@ -80,7 +80,7 @@ func (e *Engine) Search(searchKey string, system string, minDatetime string, max } // 多关键词查询模式 - return search.SearchWordIndex(e.storeName, kws, currentDocId, forward, minDatetime, maxDatetime) + return search.SearchWordIndex(e.storeName, kws, loglevels, currentDocId, forward, minDatetime, maxDatetime) } // 添加日志 diff --git a/glc/ldb/engine_test.go b/glc/ldb/engine_test.go index a306b5b..04ceb42 100644 --- a/glc/ldb/engine_test.go +++ b/glc/ldb/engine_test.go @@ -46,7 +46,7 @@ func Test_all(t *testing.T) { // } // time.Sleep(time.Duration(5) * time.Second) - rs := engine.Search(` them java `, "", "", "", "", 0, true) + rs := engine.Search(` them java `, "", "", "", "", make([]string, 0), 0, true) cmn.Println("共查到", rs.Total, "件") for _, v := range rs.Data { cmn.Println(v.Id, v.Text) diff --git a/glc/ldb/search/search_keys.go b/glc/ldb/search/search_keys.go index 729f333..63b872f 100644 --- a/glc/ldb/search/search_keys.go +++ b/glc/ldb/search/search_keys.go @@ -31,7 +31,7 @@ type WidxStorage struct { } // 多关键词时计算关键词索引交集 -func SearchWordIndex(storeName string, kws []string, currentDocId uint32, forward bool, minDatetime string, maxDatetime string) *SearchResult { +func SearchWordIndex(storeName string, kws []string, loglevels []string, currentDocId uint32, forward bool, minDatetime string, maxDatetime string) *SearchResult { storeLogData := storage.NewLogDataStorageHandle(storeName) // 数据 // 时间条件范围判断,默认全部,有检索条件时调整范围 @@ -75,7 +75,7 @@ func SearchWordIndex(storeName string, kws []string, currentDocId uint32, forwar } widxs = append(widxs, widxStorage) } - return findSame(currentDocId, forward, minDocumentId, maxDocumentId, storeLogData, widxs...) + return findSame(currentDocId, loglevels, forward, minDocumentId, maxDocumentId, storeLogData, widxs...) } // 无关键词时走全量检索 @@ -205,8 +205,9 @@ func SearchLogData(storeName string, currentDocId uint32, forward bool, minDatet } // 参数widxs长度要求大于1,currentDocId不传就是查第一页 -func findSame(currentDocId uint32, forward bool, minDocumentId uint32, maxDocumentId uint32, storeLogData *storage.LogDataStorageHandle, widxs ...*WidxStorage) *SearchResult { +func findSame(currentDocId uint32, loglevels []string, forward bool, minDocumentId uint32, maxDocumentId uint32, storeLogData *storage.LogDataStorageHandle, widxs ...*WidxStorage) *SearchResult { + allloglevels := cmn.Join(loglevels, ",") var rs = new(SearchResult) rs.Total = cmn.Uint32ToString(storeLogData.TotalCount()) // 日志总量件数 @@ -275,8 +276,19 @@ func findSame(currentDocId uint32, forward bool, minDocumentId uint32, maxDocume } // 找到则加入结果 if flg { - rsCnt++ - rs.Data = append(rs.Data, storeLogData.GetLogDataModel(docId)) + md := storeLogData.GetLogDataModel(docId) + if len(loglevels) > 0 { + // 多选条件时做匹配判断 + if cmn.ContainsIngoreCase(allloglevels, md.LogLevel) { + rsCnt++ + rs.Data = append(rs.Data, md) + } + } else { + // 单选或全选时找到的都是匹配的 + rsCnt++ + rs.Data = append(rs.Data, md) + } + if rsCnt >= conf.GetPageSize() { break // 最多找一页 } @@ -288,7 +300,7 @@ func findSame(currentDocId uint32, forward bool, minDocumentId uint32, maxDocume tmpMinPos-- // 当前最短索引可能不变,得正常减1,若变化则会被覆盖没有关系 } } else { - // 有相对文档ID且是前一页方向 + // 有相对文档ID且是前一页方向(注:暂未使用,未经测试) pos++ var ary []*logdata.LogDataModel for i := pos; i <= totalCount; i++ { diff --git a/glc/www/controller/log_search_controller.go b/glc/www/controller/log_search_controller.go index 9b3ffd2..be2c4ca 100644 --- a/glc/www/controller/log_search_controller.go +++ b/glc/www/controller/log_search_controller.go @@ -22,17 +22,23 @@ func LogSearchController(req *gweb.HttpRequest) *gweb.HttpResult { datetimeFrom := req.GetFormParameter("datetimeFrom") datetimeTo := req.GetFormParameter("datetimeTo") system := req.GetFormParameter("system") - loglevel := req.GetFormParameter("loglevel") + loglevel := req.GetFormParameter("loglevel") // 单选条件 + loglevels := cmn.Split(loglevel, ",") // 多选条件 + if len(loglevels) <= 1 || len(loglevels) >= 4 { + loglevels = make([]string, 0) // 多选的单选或全选,都清空(单选走loglevel索引,全选等于没选) + } if !cmn.IsBlank(system) { system = "~" + cmn.Trim(system) } - if !cmn.IsBlank(loglevel) { - loglevel = "!" + cmn.Trim(loglevel) + if !cmn.IsBlank(loglevel) && len(loglevels) == 0 { + loglevel = "!" + cmn.Trim(loglevel) // 单个条件时作为索引条件 + } else { + loglevel = "" // 多选条件时不使用,改用loglevels } eng := ldb.NewEngine(storeName) - rs := eng.Search(searchKey, system, datetimeFrom, datetimeTo, loglevel, currentId, forward) + rs := eng.Search(searchKey, system, datetimeFrom, datetimeTo, loglevel, loglevels, currentId, forward) // 检索结果后处理 rs.PageSize = cmn.IntToString(conf.GetPageSize()) diff --git a/glc/www/web/src/views/glc/search/GlcMain.vue b/glc/www/web/src/views/glc/search/GlcMain.vue index 1a24656..497d8ed 100644 --- a/glc/www/web/src/views/glc/search/GlcMain.vue +++ b/glc/www/web/src/views/glc/search/GlcMain.vue @@ -17,8 +17,8 @@ - + @@ -205,7 +205,7 @@ function search() { data.searchKey = formData.value.searchKeys; data.storeName = formData.value.storage; data.system = formData.value.system; - data.loglevel = formData.value.loglevel; + data.loglevel = formData.value.loglevel.join(','); data.datetimeFrom = (formData.value.datetime || ['', ''])[0]; data.datetimeTo = (formData.value.datetime || ['', ''])[1]; @@ -251,7 +251,7 @@ function searchMore() { data.searchKey = formData.value.searchKeys; data.storeName = formData.value.storage; data.system = formData.value.system; - data.loglevel = formData.value.loglevel; + data.loglevel = formData.value.loglevel.join(','); data.datetimeFrom = (formData.value.datetime || ['', ''])[0]; data.datetimeTo = (formData.value.datetime || ['', ''])[1]; data.forward = true