recommendanswerlogic.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package logic
  2. import (
  3. cm "app.yhyue.com/moapp/jybase/common"
  4. elastic "app.yhyue.com/moapp/jybase/esv1"
  5. "context"
  6. "encoding/json"
  7. "github.com/zeromicro/go-zero/core/logx"
  8. . "knowledgeBase/rpc/knowledge/init"
  9. "knowledgeBase/rpc/knowledge/internal/svc"
  10. "knowledgeBase/rpc/knowledge/knowledge"
  11. "knowledgeBase/rpc/knowledge/knowledgeclient"
  12. "knowledgeBase/rpc/knowledge/util"
  13. "log"
  14. "strconv"
  15. "strings"
  16. )
  17. type RecommendAnswerLogic struct {
  18. ctx context.Context
  19. svcCtx *svc.ServiceContext
  20. logx.Logger
  21. }
  22. func NewRecommendAnswerLogic(ctx context.Context, svcCtx *svc.ServiceContext) *RecommendAnswerLogic {
  23. return &RecommendAnswerLogic{
  24. ctx: ctx,
  25. svcCtx: svcCtx,
  26. Logger: logx.WithContext(ctx),
  27. }
  28. }
  29. func (l *RecommendAnswerLogic) RecommendAnswer(in *knowledgeclient.FindAnswerReq) (*knowledgeclient.RecommendAnswerResp, error) {
  30. var knowledges []*knowledge.Question
  31. //根据问题进行分词
  32. kwResp := util.HttpDo(in.Question)
  33. var kwMap []map[string]interface{}
  34. err := json.Unmarshal([]byte(kwResp), &kwMap)
  35. if err != nil {
  36. log.Println("推荐答案获取分词解码出错", err)
  37. return nil, err
  38. }
  39. var keyWords = ""
  40. if kwMap != nil && len(kwMap) > 0 {
  41. for k, v := range kwMap {
  42. if strings.Contains(v["nature"].(string), "n") && len(v["word"].(string)) > 3 {
  43. if k > 0 && len(keyWords) > 1 {
  44. keyWords += " "
  45. }
  46. keyWords += v["word"].(string)
  47. }
  48. }
  49. }
  50. //fmt.Println("关键字:", kws)
  51. var searchField = `"_id","answer","questions"`
  52. if keyWords != "" {
  53. var query = util.DSL4SearchByKwsOrid(keyWords, strconv.Itoa(int(in.TenantId)))
  54. res := elastic.GetAllByNgram(C.Es.Index, C.Es.Type, query, "", "", searchField, 0, 3, 0, false)
  55. //log.Println("link_obj:", link_obj)
  56. if res != nil && len(*res) > 0 {
  57. for _, val := range *res {
  58. knowledges = append(knowledges, &knowledge.Question{
  59. XId: cm.ObjToString(val["_id"]),
  60. Question: cm.ObjToString(val["question"]),
  61. Answer: cm.ObjToString(val["answer"]),
  62. })
  63. }
  64. }
  65. }
  66. return &knowledgeclient.RecommendAnswerResp{
  67. ErrorCode: 0,
  68. ErrorMsg: "请求成功",
  69. Data: knowledges,
  70. }, nil
  71. }