Browse Source

推荐问题

renjiaojiao 3 năm trước cách đây
mục cha
commit
62230c4514

+ 1 - 1
rpc/knowledge/internal/logic/knowledgeaddlogic.go

@@ -2,9 +2,9 @@ package logic
 
 import (
 	"context"
+	"github.com/zeromicro/go-zero/core/logx"
 	"knowledgeBase/rpc/knowledge/knowledgeclient"
 
-	"github.com/tal-tech/go-zero/core/logx"
 	"knowledgeBase/rpc/knowledge/internal/svc"
 )
 

+ 41 - 41
rpc/knowledge/internal/logic/recommendanswerlogic.go

@@ -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
 }

+ 8 - 14
rpc/knowledge/utils/elasticsearch_dsl.go

@@ -107,26 +107,20 @@ func DSL4SmartResponseList(question, msgType string, repositoryId []string, must
 	return queryDSL
 }
 
-func DSL4SearchByKwsOrid(kws, _id string, repositoryArr []string) string {
+func DSL4SearchByKwsOrid(keyWords string, tenantId string) string {
 
 	var (
 		sql        = `{"query": {"bool": {"must": [%s%s]}}}`
 		queryMatch = `{"match":{"knowledgeKeyWords":{"query":"%s","minimum_should_match":"%s"}}}`
-		idTerms    = `,{"terms":{"smart.id":[%s]}}`
-		ridTerms   = `,{"terms":{"repositoryId":%s}}`
-		id         = `"%s"`
+		//idTerms    = `,{"terms":{"smart.id":[%s]}}`
+		ridTerms = `,{"terms":{"tenantId":%s}}`
+		//id       = `"%s"`
 	)
-	queryMatch = fmt.Sprintf(queryMatch, kws, "20%")
+	queryMatch = fmt.Sprintf(queryMatch, keyWords, "20%")
 	//fmt.Println("queryMatch:", queryMatch)
-	tmp := ""
-	if _id != "" {
-		tmp = fmt.Sprintf(id, _id)
-		idTerms = fmt.Sprintf(idTerms, tmp, repositoryArr)
-		sql = fmt.Sprintf(sql, queryMatch, idTerms)
-	} else {
-		ridTerms = fmt.Sprintf(ridTerms, repositoryArr)
-		sql = fmt.Sprintf(sql, queryMatch, ridTerms)
-	}
+	//tmp := ""
+	ridTerms = fmt.Sprintf(ridTerms, tenantId)
+	sql = fmt.Sprintf(sql, queryMatch, ridTerms)
 	log.Println("sql", sql)
 	return sql
 }