From 8130d83dba4a472cbca1ed1c391dff1ef5a4fb50 Mon Sep 17 00:00:00 2001 From: 97694731 <97694731@qq.com> Date: Mon, 9 Mar 2026 12:05:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=9D=A1=E4=BB=B6=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=BC=80=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- es/es_search.go | 88 ++++++++++++++++++++++++++++++++++++++++++++----- main.go | 16 ++++----- 2 files changed, 87 insertions(+), 17 deletions(-) diff --git a/es/es_search.go b/es/es_search.go index 8bc1160..647177c 100644 --- a/es/es_search.go +++ b/es/es_search.go @@ -1050,7 +1050,7 @@ func (svc *ESSearchService) SearchBookBaseInfoES(c *gin.Context) ([]ESBook, int, } // ===== saleSelect 对应字段映射 ===== - saleSelect := c.DefaultQuery("saleSelect", "2") + saleSelect := c.DefaultQuery("saleSelect", "") saleField := map[string]string{ "7": "day_sale_7", "15": "day_sale_15", @@ -1089,7 +1089,7 @@ func (svc *ESSearchService) SearchBookBaseInfoES(c *gin.Context) ([]ESBook, int, continue } - if key == "page" || key == "pageSize" || key == "per_page" || key == "saleSelect" || key == "picType" { + if key == "page" || key == "pageSize" || key == "per_page" || key == "saleSelect" || key == "picType" || key == "shopType" { continue } @@ -1113,16 +1113,78 @@ func (svc *ESSearchService) SearchBookBaseInfoES(c *gin.Context) ([]ESBook, int, // ===== is_suit ===== if key == "is_suit" { + fmt.Printf("[DEBUG] is_suit val=%q\n", val) if num, err := strconv.Atoi(val); err == nil { cond := map[string]interface{}{ "term": map[string]interface{}{"is_suit": num}, } must = append(must, cond) fmt.Printf("[DEBUG] must += %v\n", cond) + } else { + fmt.Printf("[ERROR] is_suit Atoi error: %v\n", err) } continue } + // ===== is_return ===== + if key == "is_return" { + fmt.Printf("[DEBUG] is_return val=%q\n", val) + if num, err := strconv.Atoi(val); err == nil { + cond := map[string]interface{}{ + "term": map[string]interface{}{"is_return": num}, + } + must = append(must, cond) + fmt.Printf("[DEBUG] must += %v\n", cond) + } else { + fmt.Printf("[ERROR] is_return Atoi error: %v\n", err) + } + continue + } + + // ===== is_filter ===== + // ===== is_filter(按 shopType 位匹配)===== + // ===== is_filter(按 shopType 位匹配)===== + if key == "is_filter" { + fmt.Printf("[DEBUG] is_filter val=%q\n", val) + + // 只处理 1(=1) 和 2(=0) + if val != "1" && val != "2" { + continue + } + + shopType := c.DefaultQuery("shopType", "") + var pattern string + + // val=1 -> 位=1 + // val=2 -> 位=0 + targetBit := "1" + if val == "2" { + targetBit = "0" + } + + switch shopType { + case "0": + pattern = targetBit + "*" + case "1": + pattern = "?" + targetBit + "*" + case "2": + pattern = "??" + targetBit + "*" + case "3": + pattern = "???" + targetBit + "*" + default: + continue + } + + cond := map[string]interface{}{ + "wildcard": map[string]interface{}{ + "is_filter": pattern, + }, + } + + must = append(must, cond) + fmt.Printf("[DEBUG] must += %v\n", cond) + continue + } // ===== categoryType ===== if originalKey == "categoryType" { var cond map[string]interface{} @@ -1143,7 +1205,6 @@ func (svc *ESSearchService) SearchBookBaseInfoES(c *gin.Context) ([]ESBook, int, fmt.Printf("[DEBUG] must += %v\n", cond) continue } - // ===== category ===== if key == "category" { var cond map[string]interface{} @@ -1353,9 +1414,18 @@ func (svc *ESSearchService) SearchBookBaseInfoES(c *gin.Context) ([]ESBook, int, page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", c.DefaultQuery("per_page", "10"))) from := (page - 1) * pageSize - + // ========== pageSize大于500则根据id查询 ========= fmt.Printf("[DEBUG] page=%d pageSize=%d from=%d\n", page, pageSize, from) - + var sort []map[string]interface{} + if pageSize >= 500 { + sort = []map[string]interface{}{ + {"id": map[string]interface{}{"order": "asc"}}, + } + } else { + sort = []map[string]interface{}{ + {"update_time": map[string]interface{}{"order": "desc"}}, + } + } // ========== 构建 ES 查询 ========== query := map[string]interface{}{ "from": from, @@ -1365,9 +1435,8 @@ func (svc *ESSearchService) SearchBookBaseInfoES(c *gin.Context) ([]ESBook, int, "must": must, }, }, - "sort": []map[string]interface{}{ - {"update_time": map[string]interface{}{"order": "desc"}}, - }, + + "sort": sort, } body, _ := json.MarshalIndent(query, "", " ") @@ -1433,6 +1502,7 @@ func (svc *ESSearchService) SearchBookBaseInfoES(c *gin.Context) ([]ESBook, int, return list, parsed.Hits.Total.Value, nil } + func (svc *ESSearchService) BatchGetBookBaseInfoES(c *gin.Context) ([]ESBook, int, error) { q := c.Request.URL.Query() @@ -1447,7 +1517,7 @@ func (svc *ESSearchService) BatchGetBookBaseInfoES(c *gin.Context) ([]ESBook, in } // ===== saleSelect 对应字段映射 ===== - saleSelect := c.DefaultQuery("saleSelect", "2") + saleSelect := c.DefaultQuery("saleSelect", "") saleField := map[string]string{ "7": "day_sale_7", "15": "day_sale_15", diff --git a/main.go b/main.go index 83bb2cc..42a65e2 100644 --- a/main.go +++ b/main.go @@ -175,17 +175,17 @@ func main() { //) /** 新ES,任务2 **/ - esClient, err := es.NewESClient( - []string{"http://localhost:9200"}, - "elastic", - "zDzSXel3PFwx9=6Ybmqv", - ) - ///** ES2 本地测试 **/ //esClient, err := es.NewESClient( - // []string{"http://36.212.1.63:9200"}, + // []string{"http://localhost:9200"}, // "elastic", // "zDzSXel3PFwx9=6Ybmqv", //) + /** ES2 本地测试 **/ + esClient, err := es.NewESClient( + []string{"http://36.212.1.63:9200"}, + "elastic", + "zDzSXel3PFwx9=6Ybmqv", + ) if err != nil { log.Fatalf("初始化 ES 客户端失败: %s", err) @@ -299,7 +299,7 @@ func main() { // 全字段搜索 r.GET("/api/es/searchAll", esService.SearchBooksAllFieldsHandler) // 根据条件查询 ES 图书信息 - //r.GET("/api/es/getBookBaseInfoES", esService.SearchBookBaseInfoESHandler) + r.GET("/api/es/getBookBaseInfoES", esService.SearchBookBaseInfoESHandler) // 新:核价软件用批量获取 r.GET("/api/es/batchGetBookBaseInfoES", esService.BatchGetBookBaseInfoESHandler) // 多条件高级搜索