package logic import ( cm "app.yhyue.com/moapp/jybase/common" elastic "app.yhyue.com/moapp/jybase/esv1" "context" "encoding/json" "github.com/zeromicro/go-zero/core/logx" . "knowledgeBase/rpc/knowledge/init" "knowledgeBase/rpc/knowledge/internal/svc" "knowledgeBase/rpc/knowledge/knowledge" "knowledgeBase/rpc/knowledge/knowledgeclient" "knowledgeBase/rpc/knowledge/util" "log" "strconv" "strings" ) type RecommendAnswerLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewRecommendAnswerLogic(ctx context.Context, svcCtx *svc.ServiceContext) *RecommendAnswerLogic { return &RecommendAnswerLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } func (l *RecommendAnswerLogic) RecommendAnswer(in *knowledgeclient.FindAnswerReq) (*knowledgeclient.RecommendAnswerResp, error) { var knowledges []*knowledge.Question //根据问题进行分词 kwResp := util.HttpDo(in.Question) var kwMap []map[string]interface{} err := json.Unmarshal([]byte(kwResp), &kwMap) if err != nil { log.Println("推荐答案获取分词解码出错", err) return nil, err } var keyWords = "" if kwMap != nil && len(kwMap) > 0 { for k, v := range kwMap { if strings.Contains(v["nature"].(string), "n") && len(v["word"].(string)) > 3 { if k > 0 && len(keyWords) > 1 { keyWords += " " } keyWords += v["word"].(string) } } } //fmt.Println("关键字:", kws) var searchField = `"_id","answer","questions"` if keyWords != "" { var query = util.DSL4SearchByKwsOrid(keyWords, strconv.Itoa(int(in.TenantId))) res := elastic.GetAllByNgram(C.Es.Index, C.Es.Type, query, "", "", searchField, 0, 3, 0, false) //log.Println("link_obj:", link_obj) if res != nil && len(*res) > 0 { for _, val := range *res { knowledges = append(knowledges, &knowledge.Question{ XId: cm.ObjToString(val["_id"]), Question: cm.ObjToString(val["question"]), Answer: cm.ObjToString(val["answer"]), }) } } } return &knowledgeclient.RecommendAnswerResp{ ErrorCode: 0, ErrorMsg: "请求成功", Data: knowledges, }, nil }