renjiaojiao 3 жил өмнө
parent
commit
f5fc9039a4

+ 10 - 1
api/knowledge/internal/handler/routes.go

@@ -6,7 +6,6 @@ import (
 	"net/http"
 
 	"knowledgeBase/api/knowledge/internal/svc"
-
 )
 
 func RegisterHandlers(engine *rest.Server, serverCtx *svc.ServiceContext) {
@@ -37,6 +36,16 @@ func RegisterHandlers(engine *rest.Server, serverCtx *svc.ServiceContext) {
 				Path:    "/knowledge/knowledgeDel",
 				Handler: knowledgeDelHandler(serverCtx),
 			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/knowledge/findAnswer",
+				Handler: findAnswerHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/knowledge/recommendAnswer",
+				Handler: recommendAnswerHandler(serverCtx),
+			},
 		},
 	)
 }

+ 4 - 0
api/knowledge/knowledge.api

@@ -51,4 +51,8 @@ service knowledge-api {
 	post /knowledge/knowledgeEdit (EditReq) returns (CommonRes);
 	@handler knowledgeDel
 	post /knowledge/knowledgeDel (DeleteReq) returns (CommonRes);
+	@handler findAnswer
+	post /knowledge/findAnswer (FindAnswerReq) returns (CommonRes);
+	@handler recommendAnswer
+	post /knowledge/recommendAnswer (FindAnswerReq) returns (CommonRes);
 }

+ 5 - 4
rpc/knowledge/internal/logic/findanswerlogic.go

@@ -10,6 +10,7 @@ import (
 	"knowledgeBase/rpc/knowledge/internal/svc"
 	"knowledgeBase/rpc/knowledge/knowledgeclient"
 	"knowledgeBase/rpc/knowledge/util"
+	"log"
 )
 
 type FindAnswerLogic struct {
@@ -27,21 +28,21 @@ func NewFindAnswerLogic(ctx context.Context, svcCtx *svc.ServiceContext) *FindAn
 }
 
 func (l *FindAnswerLogic) FindAnswer(in *knowledgeclient.FindAnswerReq) (*knowledgeclient.FindAnswerResp, error) {
-	var question *knowledgeclient.Question
+	var question knowledgeclient.Question
 	//组装es query
 	query := util.DSL4SmartResponse(in.Question, in.TenantId, int(in.Type))
 	fmt.Println("query:", query)
 	res := elastic.Get(C.Es.Index, C.Es.Type, query)
+	log.Println("结果:", res)
 	if res != nil && len(*res) > 0 {
 		data := (*res)[0]
-		question.XId = cm.ObjToString(data["_id"])
+		log.Println(data["answer"])
 		question.Answer = cm.ObjToString(data["answer"])
 		question.Question = cm.ObjToString(data["question"])
 	}
-	fmt.Println("根据问题匹配答案:", question)
 	return &knowledgeclient.FindAnswerResp{
 		ErrorCode: 0,
 		ErrorMsg:  "请求成功",
-		Data:      question,
+		Data:      &question,
 	}, nil
 }

+ 5 - 5
rpc/knowledge/internal/logic/knowledgeinfologic.go

@@ -1,7 +1,7 @@
 package logic
 
 import (
-	quitl "app.yhyue.com/moapp/jybase/common"
+	cm "app.yhyue.com/moapp/jybase/common"
 	"context"
 	"github.com/zeromicro/go-zero/core/logx"
 	. "knowledgeBase/rpc/knowledge/init"
@@ -34,10 +34,10 @@ func (l *KnowledgeInfoLogic) KnowledgeInfo(in *knowledgeclient.KnowledgeEntity)
 	datalist := Mysql.SelectBySql(sql, in.AnswerId)
 	if datalist != nil && *datalist != nil && len(*datalist) > 0 {
 		knowledge := knowledgeclient.KnowledgeEntity{}
-		knowledge.Answer = quitl.ObjToString((*datalist)[0]["answer"])
-		knowledge.Question = quitl.ObjToString((*datalist)[0]["question"])
-		knowledge.AnswerId = quitl.Int64All((*datalist)[0]["id"])
-		knowledge.KnowledgeId = quitl.Int64All((*datalist)[0]["knowledge_id"])
+		knowledge.Answer = cm.ObjToString((*datalist)[0]["answer"])
+		knowledge.Question = cm.ObjToString((*datalist)[0]["question"])
+		knowledge.AnswerId = cm.Int64All((*datalist)[0]["id"])
+		knowledge.KnowledgeId = cm.Int64All((*datalist)[0]["knowledge_id"])
 		result.Data = &knowledge
 		result.ErrorCode = 0
 	} else {

+ 5 - 5
rpc/knowledge/internal/logic/knowledgelistlogic.go

@@ -1,7 +1,7 @@
 package logic
 
 import (
-	quitl "app.yhyue.com/moapp/jybase/common"
+	cm "app.yhyue.com/moapp/jybase/common"
 	"context"
 	"github.com/zeromicro/go-zero/core/logx"
 	. "knowledgeBase/rpc/knowledge/init"
@@ -45,10 +45,10 @@ func (l *KnowledgeListLogic) KnowledgeList(in *knowledgeclient.ListRequest) (*kn
 		if datalist != nil && *datalist != nil && len(*datalist) > 0 {
 			for _, value := range *datalist {
 				knowledge := knowledgeclient.KnowledgeEntity{}
-				knowledge.Answer = quitl.ObjToString(value["answer"])
-				knowledge.Question = quitl.ObjToString(value["question"])
-				knowledge.AnswerId = quitl.Int64All(value["id"])
-				knowledge.KnowledgeId = quitl.Int64All(value["knowledge_id"])
+				knowledge.Answer = cm.ObjToString(value["answer"])
+				knowledge.Question = cm.ObjToString(value["question"])
+				knowledge.AnswerId = cm.Int64All(value["id"])
+				knowledge.KnowledgeId = cm.Int64All(value["knowledge_id"])
 				data = append(data, &knowledge)
 			}
 		}

+ 1 - 2
rpc/knowledge/internal/logic/recommendanswerlogic.go

@@ -30,7 +30,7 @@ func NewRecommendAnswerLogic(ctx context.Context, svcCtx *svc.ServiceContext) *R
 func (l *RecommendAnswerLogic) RecommendAnswer(in *knowledgeclient.FindAnswerReq) (*knowledgeclient.RecommendAnswerResp, error) {
 	var (
 		keyWords    = ""
-		searchField = `"_id","answer","questions"`
+		searchField = `"answer","question"`
 		answers     []*knowledgeclient.Question
 		result      = &knowledgeclient.RecommendAnswerResp{}
 	)
@@ -44,7 +44,6 @@ func (l *RecommendAnswerLogic) RecommendAnswer(in *knowledgeclient.FindAnswerReq
 		if res != nil && len(*res) > 0 {
 			for _, val := range *res {
 				answers = append(answers, &knowledgeclient.Question{
-					XId:      cm.ObjToString(val["_id"]),
 					Question: cm.ObjToString(val["question"]),
 					Answer:   cm.ObjToString(val["answer"]),
 				})

+ 13 - 0
rpc/knowledge/test/knowledge_test.go

@@ -91,3 +91,16 @@ func Test_FindAnswer(t *testing.T) {
 	log.Println("res ", res)
 	log.Println("err ", err)
 }
+
+func Test_RecommendAnswer(t *testing.T) {
+	ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
+	TestSystem := knowledgeclient.NewKnowledge(zrpc.MustNewClient(c.TestConf))
+	req := &knowledgeclient.FindAnswerReq{}
+	req.Question = "超级订阅用户权益有订阅设置"
+	req.TenantId = 10000
+	req.Type = 1
+	req.AppId = "10000"
+	res, err := TestSystem.RecommendAnswer(ctx, req)
+	log.Println("res ", res)
+	log.Println("err ", err)
+}

+ 7 - 85
rpc/knowledge/util/elasticsearch_dsl.go

@@ -8,43 +8,15 @@ import (
 	"strings"
 )
 
-var (
-	Analyze string
-	Segment string
-)
-
-/*项目中所用到的几类查询dsl语句构建工具类*/
-
-// DSL4SearchByKwsAndTags 管理后台列表查询
-func DSL4SearchByKwsAndTags(kws string, tags ...string) string {
-	var (
-		sql        = `{"query": {"bool": {"must": [%s,%s]}}}`
-		queryMatch = `{"match":{"knowledgeKeyWords":{"query":"%s","minimum_should_match":"%s"}}}`
-		tagsTerms  = `{"terms":{"tags.code":[%s]}}`
-		tag        = `"%s"`
-	)
-	if kws != "" {
-
-	}
-	queryMatch = fmt.Sprintf(queryMatch, kws, "20%")
-	tmp := ""
-	for i, val := range tags {
-		if i < len(tags)-1 {
-			tmp += fmt.Sprintf(tag, val) + ","
-		} else {
-			tmp += fmt.Sprintf(tag, val)
-		}
-	}
-	tagsTerms = fmt.Sprintf(tagsTerms, tmp)
-	sql = fmt.Sprintf(sql, queryMatch, tagsTerms)
-	return sql
-}
+/*
+	项目中所用到的几类查询dsl语句构建工具类
+*/
 
 func DSL4SmartResponse(question string, tenantId int64, msgType int) string {
 	var (
 		totalQuery = `{"post_filter":{%s},"query":{%s},"_source":[%s],"size":%d}`
 		postFilter = `"script":{"script":"def sk=_source.must_keywords;def n=0;for(item in sk){ n++;if(que.indexOf(item)>-1){return true}};if(n==0){ return true}","params":{"que":"%s"}}`
-		query      = `"bool":{"must_not":[%s],"must":[{"match":{"%s":{"query":"%s","minimum_should_match":"%s"}}},{"terms":{"tenantId":"%s"}}]}`
+		query      = `"bool":{"must_not":[%s],"must":[{"match":{"%s":{"query":"%s","minimum_should_match":"%s"}}},{"term":{"tenantId":"%s"}}]}`
 	)
 	var typeStr string
 	/*1.首先将问题使用hanlp分词*/
@@ -81,48 +53,17 @@ func DSL4SmartResponse(question string, tenantId int64, msgType int) string {
 	return ""
 }
 
-func DSL4SmartResponseList(question, msgType string, repositoryId []string, must_not string, size int, tags ...string) string {
-	queryPercent := "20%"
-	var (
-		totalQuery = `{"post_filter":{%s},"query":{%s},"_source":["_id"%s],"size":%d}`
-		postFilter = `"script":{"script":"def sk=_source.must_keywords;def n=0;for(item in sk){ n++;if(que.indexOf(item)>-1){return true}};if(n==0){ return true}","params":{"que":"%s"}}`
-		query      = `"bool":{"must_not":[%s],"must":[{"match":{"%s":{"query":"%s","minimum_should_match":"%s"}}},{"terms":{"repositoryId":%s}},{"terms":{"tags.code":[%s]}}]}`
-	)
-	/*2使用sik分词将问题分词以获取更多查询词语*/
-	//mustque := ElasticSmartIK(question, "http://39.106.145.77:9201/smart/_analyze")
-	mustque := ElasticSmartIK(question, Analyze)
-	if mustque != "" {
-		postFilter = fmt.Sprintf(postFilter, mustque)
-	}
-	tmp := ""
-	for i, val := range tags {
-		if i < len(tags)-1 {
-			tmp += fmt.Sprintf(`"%s"`, val) + ","
-		} else {
-			tmp += fmt.Sprintf(`"%s"`, val)
-		}
-	}
-	query = fmt.Sprintf(query, must_not, msgType, question, queryPercent, repositoryId, tmp)
-	queryDSL := fmt.Sprintf(totalQuery, postFilter, query, `,"answer","questions.question"`, size)
-	log.Println("queryDSL:", queryDSL)
-	return queryDSL
-}
-
 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":{"tenantId":%s}}`
-		//id       = `"%s"`
+		queryMatch = `{"match":{"keywords":{"query":"%s","minimum_should_match":"%s"}}}`
+		ridTerms   = `,{"term":{"tenantId":%s}}`
 	)
 	queryMatch = fmt.Sprintf(queryMatch, keyWords, "20%")
-	//fmt.Println("queryMatch:", queryMatch)
-	//tmp := ""
 	ridTerms = fmt.Sprintf(ridTerms, tenantId)
 	sql = fmt.Sprintf(sql, queryMatch, ridTerms)
-	log.Println("sql", sql)
+	//log.Println("sql", sql)
 	return sql
 }
 
@@ -149,22 +90,3 @@ func GetQueryOT(tags, question, keywords, repositoryId string) (qstr string) {
 	qstr = fmt.Sprintf(query, queryMatch, queryTerms, queryId, queryQues)
 	return qstr
 }
-
-/*func GetFindQuery(keywords, tags, repositoryId string) string {
-	var query = `{"query":{"bool":{"must":[%s%s%s]}}}`
-	query_match := ``
-	query_terms := ``
-	query_id := ``
-	if keywords != "" {
-		query_match = `{"match":{"knowledgeKeyWords":{"query":"` + keywords + `","minimum_should_match":"40%"}}},`
-	}
-	tags = strings.Replace(tags, ` `, `","`, -1)
-	if tags != "" {
-		query_terms = `{"terms":{"tags.code":["` + tags + `"]}},`
-	}
-	if repositoryId != "" {
-		query_id = `{"terms":{"repositoryId":[` + repositoryId + `]}}`
-	}
-	qstr := fmt.Sprintf(query, query_match, query_terms, query_id)
-	return qstr
-}*/