|
@@ -1,10 +1,19 @@
|
|
|
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 {
|
|
@@ -22,55 +31,46 @@ func NewRecommendAnswerLogic(ctx context.Context, svcCtx *svc.ServiceContext) *R
|
|
|
}
|
|
|
|
|
|
func (l *RecommendAnswerLogic) RecommendAnswer(in *knowledgeclient.FindAnswerReq) (*knowledgeclient.RecommendAnswerResp, error) {
|
|
|
- // todo: add your logic here and delete this line
|
|
|
-
|
|
|
- /*question := in.Question
|
|
|
- result := utils.HttpDo(in.Question)
|
|
|
- var resmap []map[string]interface{}
|
|
|
- json.Unmarshal([]byte(result), &resmap)
|
|
|
-
|
|
|
- pid := utils.BsonIdToSId(res["pid"])
|
|
|
- //log.Println(pid)
|
|
|
- rquery := map[string]interface{}{
|
|
|
- "platFormUserId": pid,
|
|
|
- }
|
|
|
- repository := repositoryService.FindByField(rquery)
|
|
|
- repositoryId := utils.BsonIdToSId(repository.Id)
|
|
|
-
|
|
|
- repositoryIdArr := getCiteRepository(pid)
|
|
|
- var strr string
|
|
|
- if len(repositoryIdArr) > 0 {
|
|
|
- strr = "," + "\"" + repositoryId + "\""
|
|
|
- } else {
|
|
|
- strr = "\"" + repositoryId + "\""
|
|
|
+ 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
|
|
|
}
|
|
|
- repositoryIdArr = append(repositoryIdArr, strr)
|
|
|
-
|
|
|
- var kws = ""
|
|
|
- var link_obj = &[]map[string]interface{}{}
|
|
|
- if len(resmap) > 0 {
|
|
|
- for k, v := range resmap {
|
|
|
+ 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(kws) > 1 {
|
|
|
- kws += " "
|
|
|
+ if k > 0 && len(keyWords) > 1 {
|
|
|
+ keyWords += " "
|
|
|
}
|
|
|
- kws += v["word"].(string)
|
|
|
+ keyWords += v["word"].(string)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//fmt.Println("关键字:", kws)
|
|
|
- var search_field = `"_id","knowledgeKeyWords","answer","relativeKnowledgeId","createUser","tags","questions","repositoryId","createTime","updateTime","must_keywords","highweight_keywords"`
|
|
|
- if kws != "" {
|
|
|
- var qstr = tools.DSL4SearchByKwsOrid(kws, id, repositoryIdArr)
|
|
|
- link_obj = elastic.GetAllByNgram(INDEX, TYPE, qstr, "", "", search_field, 0, 5, 0, false)
|
|
|
+ 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)
|
|
|
- } else {
|
|
|
-
|
|
|
+ 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"]),
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- obj := []interface{}{}
|
|
|
- obj = append(obj, kws)
|
|
|
- obj = append(obj, link_obj)
|
|
|
- context.JSON(http.StatusOK, obj)*/
|
|
|
|
|
|
- return &knowledgeclient.RecommendAnswerResp{}, nil
|
|
|
+ return &knowledgeclient.RecommendAnswerResp{
|
|
|
+ ErrorCode: 0,
|
|
|
+ ErrorMsg: "请求成功",
|
|
|
+ Data: knowledges,
|
|
|
+ }, nil
|
|
|
}
|