|
@@ -1,13 +1,12 @@
|
|
|
package service
|
|
|
|
|
|
+import "C"
|
|
|
import (
|
|
|
cm "app.yhyue.com/moapp/jybase/common"
|
|
|
. "app.yhyue.com/moapp/jybase/encrypt"
|
|
|
elastic "app.yhyue.com/moapp/jybase/esv1"
|
|
|
"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/usercenter"
|
|
|
. "bp.jydev.jianyu360.cn/SocialPlatform/knowledgeBase/entity"
|
|
|
- "bp.jydev.jianyu360.cn/SocialPlatform/knowledgeBase/rpc/knowledge/internal/config"
|
|
|
-
|
|
|
//. "bp.jydev.jianyu360.cn/SocialPlatform/knowledgeBase/rpc/knowledge/init"
|
|
|
"bp.jydev.jianyu360.cn/SocialPlatform/knowledgeBase/rpc/knowledge/knowledgeclient"
|
|
|
"bp.jydev.jianyu360.cn/SocialPlatform/knowledgeBase/rpc/knowledge/util"
|
|
@@ -27,15 +26,22 @@ var (
|
|
|
Type = "smart"
|
|
|
)
|
|
|
|
|
|
-func (k *KnowledgeService) KnowledgeAdd(param *knowledgeclient.AddRequest) (bool, string, error) {
|
|
|
+func (k *KnowledgeService) KnowledgeAdd(param *knowledgeclient.AddRequest, segment string) (bool, string, error) {
|
|
|
//先查找知识库Id
|
|
|
query := map[string]interface{}{"status": 1, "appid": param.AppId, "ent_id": param.EntId}
|
|
|
datalist := Mysql.Find(util.KNOWLEDGE, query, "id", "", -1, -1)
|
|
|
if datalist != nil && *datalist != nil && len(*datalist) > 0 {
|
|
|
//问题进行分词
|
|
|
- keywords := util.HanlpGetNormalWords(param.Question, config.C.Segment)
|
|
|
- if len(keywords) == 0 {
|
|
|
- keywords = append(keywords, param.Question)
|
|
|
+ keywords := ""
|
|
|
+ keywordsArr := util.HanlpGetNormalWords(param.Question, segment)
|
|
|
+ log.Println("keywordsArr", keywordsArr)
|
|
|
+ if len(keywordsArr) != 0 {
|
|
|
+ for _, val := range keywordsArr {
|
|
|
+ keywords += val + " "
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if keywords == "" {
|
|
|
+ keywords = param.Question
|
|
|
}
|
|
|
//通过entUserId获取创建人名称,调用用户中心
|
|
|
req := &usercenter.EntUserReq{
|
|
@@ -98,9 +104,16 @@ func (k *KnowledgeService) KnowledgeAdd(param *knowledgeclient.AddRequest) (bool
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func (k *KnowledgeService) KnowledgeEdit(param *knowledgeclient.KnowledgeEditReq) (ok bool, msg string, err error) {
|
|
|
+func (k *KnowledgeService) KnowledgeEdit(param *knowledgeclient.KnowledgeEditReq, segment string) (ok bool, msg string, err error) {
|
|
|
//获取问题分词
|
|
|
- keywords := util.HttpDo(param.Question)
|
|
|
+ keywords := ""
|
|
|
+ keywordsArr := util.HanlpGetNormalWords(param.Question, segment)
|
|
|
+ log.Println("keywordsArr", keywordsArr)
|
|
|
+ if len(keywordsArr) != 0 {
|
|
|
+ for _, val := range keywordsArr {
|
|
|
+ keywords += val + " "
|
|
|
+ }
|
|
|
+ }
|
|
|
if keywords == "" {
|
|
|
keywords = param.Question
|
|
|
}
|
|
@@ -233,14 +246,14 @@ func (k *KnowledgeService) KnowledgeDel(answerId int64) (ok bool, msg string) {
|
|
|
return false, "删除mysql问题失败"
|
|
|
}
|
|
|
|
|
|
-func (k *KnowledgeService) FindAnswer(param *knowledgeclient.FindAnswerReq) *knowledgeclient.Question {
|
|
|
+func (k *KnowledgeService) FindAnswer(param *knowledgeclient.FindAnswerReq, addr, index, segment string) *knowledgeclient.Question {
|
|
|
var question knowledgeclient.Question
|
|
|
robotEntId := SE.Decode4Hex(param.RobotEntId)
|
|
|
- logx.Info("机器人企业id:", robotEntId)
|
|
|
//组装es query
|
|
|
- query := util.DSL4SmartResponse(param.Question, robotEntId, int(param.Type))
|
|
|
- logx.Info("es查询:", query)
|
|
|
+ query := util.DSL4SmartResponse(param.Question, robotEntId, int(param.Type), addr, index, segment)
|
|
|
+
|
|
|
res := elastic.Get(Index, Type, query)
|
|
|
+ log.Println("es查询:", res)
|
|
|
if res != nil && len(*res) > 0 {
|
|
|
data := (*res)[0]
|
|
|
question.Answer = cm.ObjToString(data["answer"])
|
|
@@ -249,14 +262,24 @@ func (k *KnowledgeService) FindAnswer(param *knowledgeclient.FindAnswerReq) *kno
|
|
|
return &question
|
|
|
}
|
|
|
|
|
|
-func (k *KnowledgeService) RecommendAnswer(param *knowledgeclient.FindAnswerReq) []*knowledgeclient.Question {
|
|
|
+func (k *KnowledgeService) RecommendAnswer(param *knowledgeclient.FindAnswerReq, segment string) []*knowledgeclient.Question {
|
|
|
var (
|
|
|
keyWords = ""
|
|
|
searchField = `"answer","question"`
|
|
|
answers []*knowledgeclient.Question
|
|
|
)
|
|
|
//根据问题进行分词
|
|
|
- keyWords = util.HttpDo(param.Question)
|
|
|
+ keywords := ""
|
|
|
+ keywordsArr := util.HanlpGetNormalWords(param.Question, segment)
|
|
|
+ log.Println("keywordsArr", keywordsArr)
|
|
|
+ if len(keywordsArr) != 0 {
|
|
|
+ for _, val := range keywordsArr {
|
|
|
+ keywords += val + " "
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if keywords == "" {
|
|
|
+ keywords = param.Question
|
|
|
+ }
|
|
|
log.Println("问题分词关键字:", keyWords)
|
|
|
var query = util.DSL4SearchByKwsOrid(keyWords, SE.Decode4Hex(param.RobotEntId))
|
|
|
res := elastic.GetAllByNgram(Index, Type, query, "", "", searchField, 0, 3, 0, false)
|