12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- 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/utils"
- "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 := utils.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 = utils.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
- }
|