package service import ( "github.com/gin-gonic/gin" "github.com/iancoleman/orderedmap" "github.com/tidwall/gjson" "gopkg.in/olivere/elastic.v5" "search_server/model" "search_server/pkg/common" "search_server/pkg/config" "search_server/pkg/es" "search_server/service/query" "strconv" "strings" ) type AlikeService struct {} /* 返回供应商详情 */ func (qs *AlikeService) AlikeSearchInfo(ctx *gin.Context) (results model.LyResponse) { target := ctx.Request.FormValue("target") //搜索目标: 1 国产 2 所有sku index := "zhuanmai" //搜索国产替代 索引 if target == "2" { //搜索所有 index = config.Get("es.index_name").String() } //索引字典 queryString, err := query.GetDemeQuery(ctx,target) if err != nil { results.ErrorCode = 1001; results.ErrorMsg = err.Error() return } esResult, err := es.CurlES(index, queryString) if err != nil { results.ErrorCode = 0; results.ErrorMsg = err.Error() return } common.PrintDebugHtml(ctx,"查询索引:"+index) common.PrintDebugHtml(ctx,esResult) //判断返回总条数 total := gjson.Get(esResult, "hits.total").Int() if total == 0 { results.ErrorCode = 0; results.ErrorMsg = "查询没有数据" return } goodsIds := make([]string,0) //goods_id gjArray := gjson.Get(esResult, "hits.hits.#._source").Array() for _, item := range gjArray { goodsIds = append(goodsIds, item.Get("goods_id").String()) } //拼接返回数据 A := orderedmap.New() //初始化有序map,拼接data 数据 results.ErrorCode = 0; results.ErrorMsg = "查询成功"; page := PageClear(ctx,total); page["took"] = gjson.Get(esResult, "took").Int() A.Set("page",page) //分页信息 common.PrintDebugHtml(ctx,goodsIds) //组装商品详情 endArr := make([]model.DullGoodsData,0) goodsList, _ := GetGoodsInfo(ctx,goodsIds) for _,v := range goodsList{ GoodsUrl := "" BrandUrl := "" referer := ctx.GetHeader("Referer") if referer != ""{ dome := strings.Split(referer,".com") if len(dome) > 0{ if v.SupplierName == "猎芯自营" { GoodsUrl = dome[0]+".com/item/"+v.GoodsId+".html" BrandUrl = dome[0]+".com/v3/brand/list/"+strconv.Itoa(v.BrandId)+".html" }else{ GoodsUrl = dome[0]+".com/goods_"+v.GoodsId+".html" BrandUrl = dome[0]+".com/v3/brand/list/"+strconv.Itoa(v.BrandId)+".html" } } } endArr = append(endArr,model.DullGoodsData{ ApiGoods:v, GoodsUrl: GoodsUrl, BrandUrl: BrandUrl, }) } A.Set("goods_lists",endArr) results.Data = A; return } /* 联想词 */ func (qs *AlikeService) ThinkGoods(ctx *gin.Context) (results model.LyResponse) { goodsName := ctx.Request.FormValue("k"); if goodsName == "" { results.ErrorCode = 0; results.ErrorMsg = "" return } //字符过滤 goodsName = common.DrawLetterNum(goodsName) //查询es query := elastic.NewBoolQuery() query.Filter(elastic.NewTermQuery("auto_goods_name", goodsName)) source := elastic.NewSearchSource().Query(query) source = source.From(0).Size(10) searchRequestStr, _ := elastic.NewSearchRequest().Source(source).Body() common.PrintDebugHtml(ctx,searchRequestStr) result, err := es.CurlES("digikey", searchRequestStr) if err != nil { results.ErrorCode = 0; results.ErrorMsg = err.Error() return } goodsNameList := make([]string, 0) goodsList := gjson.Get(result, "hits.hits.#._source").Array() for _, goods := range goodsList { goodsName := gjson.Get(goods.String(), "auto_goods_name").String() goodsNameList = append(goodsNameList, goodsName) } results.ErrorCode = 0; results.ErrorMsg = "查询成功" results.Data = goodsNameList return }