Commit dd2c7e26 by mushishixian

fix

parent 4d08965e
...@@ -14,16 +14,16 @@ type RecvPro struct { ...@@ -14,16 +14,16 @@ type RecvPro struct {
} }
func init() { func init() {
//queueExchange := rabbitmq.QueueExchange{ queueExchange := rabbitmq.QueueExchange{
// "bom_match", "bom_match",
// "bom_match", "bom_match",
// "bom", "bom",
// "direct", "direct",
// "amqp://huntadmin:jy2y2900@192.168.1.237:5672/", "amqp://huntadmin:jy2y2900@192.168.1.237:5672/",
//} }
//
//str := `{"bom_id":568,"delivery_type":1,"sort":1}` str := `{"bom_id":545,"delivery_type":1,"sort":1}`
//rabbitmq.Send(queueExchange, str) rabbitmq.Send(queueExchange, str)
} }
func (t *RecvPro) Consumer(dataByte []byte) (err error) { func (t *RecvPro) Consumer(dataByte []byte) (err error) {
......
...@@ -31,8 +31,9 @@ func MatchGoodsNameByAttrs(bomItems []model.BomItem) (result []model.BomItem, er ...@@ -31,8 +31,9 @@ func MatchGoodsNameByAttrs(bomItems []model.BomItem) (result []model.BomItem, er
for _, item := range bomItems { for _, item := range bomItems {
//如果有型号,但是型号有可能是参数,所以先去匹配下参数,有的话转成对应的型号 //如果有型号,但是型号有可能是参数,所以先去匹配下参数,有的话转成对应的型号
if item.GoodsName != "" && item.Attrs == "" { if item.GoodsName != "" && item.Attrs == "" {
//search = searchAttr(item.GoodsName, item.BrandName, item.Encap, search) //todo
//searchFlag = true search = searchAttr(item.GoodsName, item.BrandName, item.Encap, search)
searchFlag = true
} }
//如果没有型号,但是有参数(参数有可能是型号),那就去匹配参数 //如果没有型号,但是有参数(参数有可能是型号),那就去匹配参数
if item.GoodsName == "" && item.Attrs != "" { if item.GoodsName == "" && item.Attrs != "" {
...@@ -66,30 +67,32 @@ func MatchGoodsNameByAttrs(bomItems []model.BomItem) (result []model.BomItem, er ...@@ -66,30 +67,32 @@ func MatchGoodsNameByAttrs(bomItems []model.BomItem) (result []model.BomItem, er
func searchAttr(attrOrigin, brandName, encap string, search *es.MultiSearchService) (result *es.MultiSearchService) { func searchAttr(attrOrigin, brandName, encap string, search *es.MultiSearchService) (result *es.MultiSearchService) {
//先去切割参数得到参数列表 //先去切割参数得到参数列表
fmt.Println(attrOrigin)
attrs := splitAttrs(attrOrigin) attrs := splitAttrs(attrOrigin)
//当切割出来的参数大于1个的时候,就代表这的确是参数了,就要去针对每个参数进行里面再一次提纯 //当切割出来的参数大于1个的时候,就要去针对每个参数进行里面再一次提纯
if len(attrs) > 1 { if len(attrs) > 1 {
for key, attr := range attrs { for key, attr := range attrs {
attrs[key] = changeKeyword(attr) attrs[key] = changeKeyword(attr)
//切割完以后,还要去对切割后的参数提取值,因为有可能参数没有分隔符 //切割完以后,还要去对切割后的参数提取值,因为有可能参数没有分隔符
extractRes := extractAttr(attrs[key]) extractRes := extractAttr(attrs[key])
for ek, eAttr := range extractRes { for ek, eAttr := range extractRes {
if ek == 1 { if ek == 0 {
attrs[key] = extractRes[1] attrs[key] = extractRes[0]
} else { } else {
attrs = append(attrs, eAttr) attrs = append(attrs, eAttr)
} }
} }
} }
} else {
attrs = extractAttrsByStr(attrs[0])
} }
fmt.Println(attrs)
var attrsSlice []string var attrsSlice []string
//去转换每一个参数,得到去查询es的标准格式 //去转换每一个参数,得到去查询es的标准格式
for _, attr := range attrs { for _, attr := range attrs {
attr = TransformESParam(attr) attr = TransformESParam(attr)
if attr != "" {
attrsSlice = append(attrsSlice, attr) attrsSlice = append(attrsSlice, attr)
} }
}
//单独针对封装进行转换 //单独针对封装进行转换
if encap != "" { if encap != "" {
//先提取出纯数字 //先提取出纯数字
...@@ -103,7 +106,7 @@ func searchAttr(attrOrigin, brandName, encap string, search *es.MultiSearchServi ...@@ -103,7 +106,7 @@ func searchAttr(attrOrigin, brandName, encap string, search *es.MultiSearchServi
} }
} }
query := getQuery(attrsSlice) query := getQuery(attrsSlice)
if brandName != "" { if brandName != "" && len(attrsSlice) > 0 {
//提取全英文,转成大写 //提取全英文,转成大写
if strings.Contains(brandName, " ") { if strings.Contains(brandName, " ") {
//有空格隔开只取第一个 //有空格隔开只取第一个
...@@ -120,6 +123,7 @@ func searchAttr(attrOrigin, brandName, encap string, search *es.MultiSearchServi ...@@ -120,6 +123,7 @@ func searchAttr(attrOrigin, brandName, encap string, search *es.MultiSearchServi
source.Sort("brand_sort", true) source.Sort("brand_sort", true)
source = source.From(0).Size(1) source = source.From(0).Size(1)
searchRequest := es.NewSearchRequest().Source(source) searchRequest := es.NewSearchRequest().Source(source)
//fmt.Println(searchRequest.Body())
return search.Add(searchRequest) return search.Add(searchRequest)
} }
...@@ -152,8 +156,19 @@ func splitAttrs(attrs string) (result []string) { ...@@ -152,8 +156,19 @@ func splitAttrs(attrs string) (result []string) {
//提取参数 //提取参数
func extractAttr(attr string) []string { func extractAttr(attr string) []string {
regexpUnit := strings.Join(getNeedCheckUnit(), "|") regexpUnit := strings.Join(getNeedCheckUnit(), "|")
r, _ := regexp.Compile("(\\d+(\\.\\d+)?)(" + regexpUnit + ")") r, _ := regexp.Compile("(\\d+[\\/\\d. ]*|\\d)(" + regexpUnit + ")" + "")
res := r.FindAllString(attr, 100)
return res
}
//提取参数,从一个字符串里面,注意要提取出两个参数才当作是
func extractAttrsByStr(attr string) []string {
regexpUnit := strings.Join(getNeedCheckUnit(), "|")
r, _ := regexp.Compile("(\\d+[\\/\\d. ]*|\\d)(" + regexpUnit + ")" + "")
res := r.FindAllString(attr, 100) res := r.FindAllString(attr, 100)
if len(res) < 2 {
return []string{attr}
}
return res return res
} }
...@@ -237,6 +252,10 @@ func getAttrValueByAttr(attr string) (attrValue string) { ...@@ -237,6 +252,10 @@ func getAttrValueByAttr(attr string) (attrValue string) {
//获取匹配的条件 //获取匹配的条件
func getQuery(attrs []string) (query *es.BoolQuery) { func getQuery(attrs []string) (query *es.BoolQuery) {
//如果attrs为空,也要构建一个结果为空的查询,因为要使结果和bomItems数量对应起来
if len(attrs) == 0 {
attrs = []string{"€_€"}
}
var subQuery *es.TermQuery var subQuery *es.TermQuery
var nestedQuery *es.NestedQuery var nestedQuery *es.NestedQuery
query = es.NewBoolQuery() query = es.NewBoolQuery()
......
...@@ -7,6 +7,7 @@ import ( ...@@ -7,6 +7,7 @@ import (
"context" "context"
"encoding/json" "encoding/json"
"errors" "errors"
"fmt"
"math" "math"
"regexp" "regexp"
"strings" "strings"
...@@ -83,6 +84,9 @@ func SearchGoods(bomId int, bomItems []model.BomItem, deliveryType, sort int, wg ...@@ -83,6 +84,9 @@ func SearchGoods(bomId int, bomItems []model.BomItem, deliveryType, sort int, wg
defer client.Stop() defer client.Stop()
//匹配之前,去遍历bom_item,把没有型号名称但是有参数的bom_item进行型号补充 //匹配之前,去遍历bom_item,把没有型号名称但是有参数的bom_item进行型号补充
bomItems, err = MatchGoodsNameByAttrs(bomItems) bomItems, err = MatchGoodsNameByAttrs(bomItems)
for _,value:=range bomItems {
fmt.Println(value.GoodsName)
}
//第一次先去精确匹配 //第一次先去精确匹配
goodsMapList, err := getUpdateGoodsData(bomId, bomItems, deliveryType, sort, client, true) goodsMapList, err := getUpdateGoodsData(bomId, bomItems, deliveryType, sort, client, true)
if err != nil { if err != nil {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment