|
@@ -0,0 +1,654 @@
|
|
|
+package services
|
|
|
+
|
|
|
+import (
|
|
|
+ "context"
|
|
|
+ "encoding/json"
|
|
|
+ "fmt"
|
|
|
+ "github.com/PuerkitoBio/goquery"
|
|
|
+ "github.com/olivere/elastic/v7"
|
|
|
+ "github.com/olivere/elastic/v7/config"
|
|
|
+ "hongze/hongze_cygx/models"
|
|
|
+ "hongze/hongze_cygx/utils"
|
|
|
+ "html"
|
|
|
+ "log"
|
|
|
+ "os"
|
|
|
+ "strconv"
|
|
|
+ "strings"
|
|
|
+)
|
|
|
+
|
|
|
+const (
|
|
|
+ ES_URL = "http://es-cn-nif227b580019rgw6.public.elasticsearch.aliyuncs.com:9200" //<1>
|
|
|
+ ES_USERNAME = "elastic" //<2>
|
|
|
+ ES_PASSWORD = "hongze@2021" //<3>
|
|
|
+ //Grafana pwd-> 20521bb9
|
|
|
+ //Grafana username-> emon
|
|
|
+)
|
|
|
+
|
|
|
+func SaveData() {
|
|
|
+ //fmt.Println("start")
|
|
|
+ var sniff = false //<4>
|
|
|
+ cfg := &config.Config{
|
|
|
+ URL: ES_URL,
|
|
|
+ Username: ES_USERNAME,
|
|
|
+ Password: ES_PASSWORD,
|
|
|
+ }
|
|
|
+
|
|
|
+ cfg.Sniff = &sniff
|
|
|
+ var client, err = elastic.NewClientFromConfig(cfg)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("NewClientFromConfig Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var esIndex = "cygx_article"
|
|
|
+ //var esType = "article"
|
|
|
+ //
|
|
|
+ exists, err := client.IndexExists(esIndex).Do(context.Background()) //<5>
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("IndexExists Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if !exists {
|
|
|
+ _, err = client.CreateIndex(esIndex).Do(context.Background())
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("CreateIndex Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ 3161,3190,3226,3244,3264,3285,3310,3334,3370,3397,3418,3446,3477,3497,3526,3554
|
|
|
+ */
|
|
|
+
|
|
|
+ idStr := `3584,3644`
|
|
|
+ idArr := strings.Split(idStr, ",")
|
|
|
+ for _, v := range idArr {
|
|
|
+ id, _ := strconv.Atoi(v)
|
|
|
+ item, err := models.GetArticleDetailById(id)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("GetArticleDetailById Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ content := html.UnescapeString(item.Body)
|
|
|
+ doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("create doc err:", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ bodyText := doc.Text()
|
|
|
+ item.BodyText = bodyText
|
|
|
+ //新增
|
|
|
+ resp, err := client.Index().Index(esIndex).Id(strconv.Itoa(item.ArticleId)).BodyJson(item).Do(context.Background())
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("insert es failed", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fmt.Println(resp.Status)
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+
|
|
|
+ //根据id查询
|
|
|
+ searchById, err := client.Get().Index(esIndex).Type(esType).Id("3138").Do(context.Background())
|
|
|
+ if searchById.Found {
|
|
|
+ body, err := searchById.Source.MarshalJSON()
|
|
|
+ fmt.Println("body:",string(body))
|
|
|
+ fmt.Println(err)
|
|
|
+ //var resultType models.ArticleDetail
|
|
|
+ //if err := json.Unmarshal(searchById.Source,&resultType); err != nil{
|
|
|
+ // log.Error(err.Error())
|
|
|
+ //}
|
|
|
+ //fmt.Printf("search by id: %#v \n",resultType)
|
|
|
+ }
|
|
|
+ */
|
|
|
+
|
|
|
+ ////查询index中所有的数据
|
|
|
+ //var resultType models.CygxArticle
|
|
|
+ //searchAll,err := client.Search(esIndex).Type(esType).Do(context.Background())
|
|
|
+ //for _,item := range searchAll.Each(reflect.TypeOf(resultType)) {
|
|
|
+ // language := item.(models.CygxArticle)
|
|
|
+ // fmt.Printf("search by index all: %#v \n",language)
|
|
|
+ //}
|
|
|
+
|
|
|
+ //根据检索条件查询
|
|
|
+
|
|
|
+ // boolquery := elastic.NewBoolQuery()
|
|
|
+
|
|
|
+ // boolquery.Should(elastic.NewMatchQuery("Body", "专家"))
|
|
|
+ // highlight := elastic.NewHighlight()
|
|
|
+ // highlight = highlight.Fields(elastic.NewHighlighterField("Body"))
|
|
|
+ // highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
|
|
|
+
|
|
|
+ // var pageSize int
|
|
|
+ // pageSize = 20
|
|
|
+
|
|
|
+ // searchByMatch, err := client.Search(esIndex).Highlight(highlight).Size(pageSize).Query(boolquery).Do(context.Background())
|
|
|
+
|
|
|
+ // var result string
|
|
|
+ // if searchByMatch.Hits != nil {
|
|
|
+
|
|
|
+ // }
|
|
|
+ // //fmt.Println(string(result))
|
|
|
+
|
|
|
+ // utils.FileLog.Info("%s", string(result))
|
|
|
+
|
|
|
+ //var resultType models.CygxArticle
|
|
|
+ //for k,item := range searchByMatch.Each(reflect.TypeOf(resultType)) {
|
|
|
+ // language := item.(models.CygxArticle)
|
|
|
+ // fmt.Printf("search by match: %#v \n",language)
|
|
|
+ //
|
|
|
+ // fmt.Println(k)
|
|
|
+ // result,err:=json.Marshal(language)
|
|
|
+ // fmt.Println(err)
|
|
|
+
|
|
|
+ // utils.FileLog.Info("%s",string(result))
|
|
|
+ //}
|
|
|
+
|
|
|
+ // Perform the search request.
|
|
|
+ //searchByMatch, err := client.Search(esIndex).Type(esType).Query(query).From(1).Size(10).Do(context.Background())
|
|
|
+
|
|
|
+ fmt.Println("end")
|
|
|
+}
|
|
|
+
|
|
|
+type tracelog struct{}
|
|
|
+
|
|
|
+//实现输出
|
|
|
+func (tracelog) Printf(format string, v ...interface{}) {
|
|
|
+ fmt.Printf(format, v...)
|
|
|
+}
|
|
|
+
|
|
|
+func SearchByKeyWordBack02(keyWord string) (result []*models.SearchItem, err error) {
|
|
|
+ fmt.Println("keyWord:", keyWord)
|
|
|
+ pageSize := 20
|
|
|
+ keyWordArr, err := GetIndustryMapNameSlice(keyWord)
|
|
|
+ keyWordArr = RemoveDuplicatesAndEmpty(keyWordArr)
|
|
|
+
|
|
|
+ fmt.Println(keyWordArr)
|
|
|
+ fmt.Println(" keyWordArr ")
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ go utils.SendEmail(utils.APPNAME+" "+utils.RunMode+"异常提醒:", "GetIndustryMapNameSlice:"+err.Error(), utils.EmailSendToUsers)
|
|
|
+ }
|
|
|
+ //var sniff = false //<4>
|
|
|
+ //cfg := &config.Config{
|
|
|
+ // URL: ES_URL,
|
|
|
+ // Username: ES_USERNAME,
|
|
|
+ // Password: ES_PASSWORD,
|
|
|
+ //}
|
|
|
+ //
|
|
|
+ //cfg.Sniff = &sniff
|
|
|
+ //client, err := elastic.NewClientFromConfig(cfg)
|
|
|
+ errorlog := log.New(os.Stdout, "APP", log.LstdFlags)
|
|
|
+ file := "./eslog.log"
|
|
|
+ logFile, _ := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766)
|
|
|
+
|
|
|
+ client, err := elastic.NewClient(
|
|
|
+ elastic.SetURL(ES_URL),
|
|
|
+ elastic.SetBasicAuth(ES_USERNAME, ES_PASSWORD),
|
|
|
+ elastic.SetTraceLog(log.New(logFile, "ES-TRACE: ", 0)),
|
|
|
+ elastic.SetSniff(false), elastic.SetErrorLog(errorlog))
|
|
|
+
|
|
|
+ var esIndex = "cygx_article"
|
|
|
+ searchMap := make(map[int]int)
|
|
|
+ //boolquery := elastic.NewBoolQuery()
|
|
|
+ //keyWordLen := len(keyWordArr)
|
|
|
+ //n := keyWordLen
|
|
|
+ //for _, v := range keyWordArr {
|
|
|
+ // keyWord = v
|
|
|
+ // boost := float64(n)
|
|
|
+ // fmt.Println("keyWord:", keyWord)
|
|
|
+ // fmt.Println("boost:", boost)
|
|
|
+ // //matchQueryList = append(matchQueryList, elastic.NewMatchQuery("Title", keyWord).Boost(boost+0.2))
|
|
|
+ // //matchQueryList = append(matchQueryList, elastic.NewMatchQuery("BodyText", keyWord).Boost(boost+0.1))
|
|
|
+ // q1 := elastic.NewMatchQuery("Title", keyWord)
|
|
|
+ // q1 = q1.Boost(boost + 0.2)
|
|
|
+ // q2 := elastic.NewMatchQuery("BodyText", keyWord)
|
|
|
+ // q2 = q2.Boost(boost + 0.1)
|
|
|
+ // boolquery.Should(q1, q2)
|
|
|
+ // n--
|
|
|
+ //}
|
|
|
+ keyWordStr := strings.Join(keyWordArr, ",")
|
|
|
+
|
|
|
+ fmt.Println("keyWordStr ", keyWordStr)
|
|
|
+
|
|
|
+ queryString := elastic.NewQueryStringQuery(`Title:(` + keyWordStr + `) BodyText:(` + keyWordStr + `)`).Analyzer("ik_smart")
|
|
|
+
|
|
|
+ boolqueryJson, err := json.Marshal(queryString)
|
|
|
+ fmt.Println("err:", err)
|
|
|
+ fmt.Println("queryString ", string(boolqueryJson))
|
|
|
+
|
|
|
+ //boolquery.Must(elastic.NewMatchQuery("Title", keyWord), elastic.NewMatchQuery("BodyText", keyWord))
|
|
|
+ highlight := elastic.NewHighlight()
|
|
|
+ highlight = highlight.Fields(elastic.NewHighlighterField("Title"), elastic.NewHighlighterField("BodyText"))
|
|
|
+ highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
|
|
|
+ request := client.Search(esIndex).Highlight(highlight).Size(pageSize).Query(queryString)
|
|
|
+
|
|
|
+ requestJson, err := json.Marshal(request)
|
|
|
+ fmt.Println("err:", err)
|
|
|
+ fmt.Println("requestJson ", string(requestJson))
|
|
|
+
|
|
|
+ searchByMatch, err := request.Do(context.Background())
|
|
|
+
|
|
|
+ //searchByMatch, err := client.Search(esIndex).Highlight(highlight).Size(pageSize).Do(context.Background())
|
|
|
+ if err != nil {
|
|
|
+ return result, err
|
|
|
+ }
|
|
|
+ if searchByMatch.Hits != nil {
|
|
|
+ for _, v := range searchByMatch.Hits.Hits {
|
|
|
+ articleJson, err := v.Source.MarshalJSON()
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ article := new(models.CygxArticle)
|
|
|
+ err = json.Unmarshal(articleJson, &article)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ if _, ok := searchMap[article.ArticleId]; !ok {
|
|
|
+ searchItem := new(models.SearchItem)
|
|
|
+ searchItem.ArticleId, _ = strconv.Atoi(v.Id)
|
|
|
+ searchItem.Body = v.Highlight["BodyText"]
|
|
|
+ var title string
|
|
|
+ if len(v.Highlight["Title"]) > 0 {
|
|
|
+ title = v.Highlight["Title"][0]
|
|
|
+ } else {
|
|
|
+ title = article.Title
|
|
|
+ }
|
|
|
+ searchItem.Title = title
|
|
|
+ searchItem.PublishDate = article.PublishDate
|
|
|
+ result = append(result, searchItem)
|
|
|
+ searchMap[article.ArticleId] = article.ArticleId
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func SearchByKeyWordBack(keyWord string) (result []*models.SearchItem, err error) {
|
|
|
+ pageSize := 20
|
|
|
+ keyWordArr, err := GetIndustryMapNameSlice(keyWord)
|
|
|
+ if err != nil {
|
|
|
+ go utils.SendEmail(utils.APPNAME+" "+utils.RunMode+"异常提醒:", "GetIndustryMapNameSlice:"+err.Error(), utils.EmailSendToUsers)
|
|
|
+ }
|
|
|
+ var sniff = false //<4>
|
|
|
+ cfg := &config.Config{
|
|
|
+ URL: ES_URL,
|
|
|
+ Username: ES_USERNAME,
|
|
|
+ Password: ES_PASSWORD,
|
|
|
+ }
|
|
|
+
|
|
|
+ cfg.Sniff = &sniff
|
|
|
+ client, err := elastic.NewClientFromConfig(cfg)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var esIndex = "cygx_article"
|
|
|
+
|
|
|
+ searchMap := make(map[int]int)
|
|
|
+ for _, v := range keyWordArr {
|
|
|
+ keyWord = v
|
|
|
+ boolquery := elastic.NewBoolQuery()
|
|
|
+ boolquery.Must(elastic.NewMatchQuery("Title", keyWord), elastic.NewMatchQuery("BodyText", keyWord))
|
|
|
+ highlight := elastic.NewHighlight()
|
|
|
+ highlight = highlight.Fields(elastic.NewHighlighterField("Title"), elastic.NewHighlighterField("BodyText"))
|
|
|
+ highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
|
|
|
+ searchByMatch, err := client.Search(esIndex).Highlight(highlight).Size(pageSize).Query(boolquery).Do(context.Background())
|
|
|
+ if err != nil {
|
|
|
+ return result, err
|
|
|
+ }
|
|
|
+ if searchByMatch.Hits != nil {
|
|
|
+ for _, v := range searchByMatch.Hits.Hits {
|
|
|
+ articleJson, err := v.Source.MarshalJSON()
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ article := new(models.CygxArticle)
|
|
|
+ err = json.Unmarshal(articleJson, &article)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ if _, ok := searchMap[article.ArticleId]; !ok {
|
|
|
+ searchItem := new(models.SearchItem)
|
|
|
+ searchItem.ArticleId, _ = strconv.Atoi(v.Id)
|
|
|
+ searchItem.Body = v.Highlight["BodyText"]
|
|
|
+ var title string
|
|
|
+ if len(v.Highlight["Title"]) > 0 {
|
|
|
+ title = v.Highlight["Title"][0]
|
|
|
+ } else {
|
|
|
+ title = article.Title
|
|
|
+ }
|
|
|
+ searchItem.Title = title
|
|
|
+ searchItem.PublishDate = article.PublishDate
|
|
|
+ result = append(result, searchItem)
|
|
|
+ searchMap[article.ArticleId] = article.ArticleId
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func esSearch(keyWord, categoryName string) (result []*models.SearchItem, err error) {
|
|
|
+ pageSize := 20
|
|
|
+ var sniff = false //<4>
|
|
|
+ cfg := &config.Config{
|
|
|
+ URL: ES_URL,
|
|
|
+ Username: ES_USERNAME,
|
|
|
+ Password: ES_PASSWORD,
|
|
|
+ }
|
|
|
+
|
|
|
+ cfg.Sniff = &sniff
|
|
|
+ client, err := elastic.NewClientFromConfig(cfg)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var esIndex = "cygx_article"
|
|
|
+
|
|
|
+ termsQuery := elastic.NewTermsQuery("category_name", categoryName)
|
|
|
+
|
|
|
+ boolquery := elastic.NewBoolQuery()
|
|
|
+ boolquery.Must(elastic.NewMatchQuery("Title", keyWord), elastic.NewMatchQuery("BodyText", keyWord))
|
|
|
+ highlight := elastic.NewHighlight()
|
|
|
+ highlight = highlight.Fields(elastic.NewHighlighterField("Title"), elastic.NewHighlighterField("BodyText"))
|
|
|
+ highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
|
|
|
+ searchByMatch, err := client.Search(esIndex).Highlight(highlight).Size(pageSize).Query(termsQuery).Query(boolquery).Do(context.Background())
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ return result, err
|
|
|
+ }
|
|
|
+ searchMap := make(map[int]int)
|
|
|
+ if searchByMatch.Hits != nil {
|
|
|
+ for _, v := range searchByMatch.Hits.Hits {
|
|
|
+ articleJson, err := v.Source.MarshalJSON()
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ article := new(models.CygxArticle)
|
|
|
+ err = json.Unmarshal(articleJson, &article)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ if _, ok := searchMap[article.ArticleId]; !ok {
|
|
|
+ searchItem := new(models.SearchItem)
|
|
|
+ searchItem.ArticleId, _ = strconv.Atoi(v.Id)
|
|
|
+ searchItem.Body = v.Highlight["BodyText"]
|
|
|
+ var title string
|
|
|
+ if len(v.Highlight["Title"]) > 0 {
|
|
|
+ title = v.Highlight["Title"][0]
|
|
|
+ } else {
|
|
|
+ title = article.Title
|
|
|
+ }
|
|
|
+ searchItem.Title = title
|
|
|
+ searchItem.PublishDate = article.PublishDate
|
|
|
+ result = append(result, searchItem)
|
|
|
+ searchMap[article.ArticleId] = article.ArticleId
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func RemoveDuplicatesAndEmpty(a []string) (ret []string) {
|
|
|
+ a_len := len(a)
|
|
|
+ for i := 0; i < a_len; i++ {
|
|
|
+ if (i > 0 && a[i-1] == a[i]) || len(a[i]) == 0 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ ret = append(ret, a[i])
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func init21123() {
|
|
|
+ fmt.Println("start")
|
|
|
+ client, err := elastic.NewClient(elastic.SetURL(ES_URL), elastic.SetBasicAuth(ES_USERNAME, ES_PASSWORD), elastic.SetSniff(false))
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("err:", err)
|
|
|
+ }
|
|
|
+ fmt.Println(client)
|
|
|
+ keyWordStr := "医疗器械"
|
|
|
+ queryString := elastic.NewQueryStringQuery(`Title:(` + keyWordStr + `)`)
|
|
|
+
|
|
|
+ boolqueryJson, err := json.Marshal(queryString)
|
|
|
+ fmt.Println("err:", err)
|
|
|
+ fmt.Println("queryString ", string(boolqueryJson))
|
|
|
+
|
|
|
+ var esIndex = "cygx_article"
|
|
|
+ //boolquery.Must(elastic.NewMatchQuery("Title", keyWord), elastic.NewMatchQuery("BodyText", keyWord))
|
|
|
+ highlight := elastic.NewHighlight()
|
|
|
+ highlight = highlight.Fields(elastic.NewHighlighterField("Title"), elastic.NewHighlighterField("BodyText"))
|
|
|
+ highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
|
|
|
+ request := client.Search(esIndex).Highlight(highlight).Query(queryString)
|
|
|
+
|
|
|
+ requestJson, err := json.Marshal(request)
|
|
|
+ fmt.Println("err:", err)
|
|
|
+ fmt.Println("requestJson ", string(requestJson))
|
|
|
+
|
|
|
+ searchByMatch, err := request.Do(context.Background())
|
|
|
+
|
|
|
+ if searchByMatch.Hits != nil {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ fmt.Println(searchByMatch)
|
|
|
+ fmt.Println("end")
|
|
|
+}
|
|
|
+
|
|
|
+func SearchByKeyWordQuery(keyWord string) (result []*models.SearchItem, err error) {
|
|
|
+ errorlog := log.New(os.Stdout, "APP", log.LstdFlags)
|
|
|
+ file := "./rdlucklog/eslog.log"
|
|
|
+ logFile, _ := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766)
|
|
|
+
|
|
|
+ client, err := elastic.NewClient(
|
|
|
+ elastic.SetURL(ES_URL),
|
|
|
+ elastic.SetBasicAuth(ES_USERNAME, ES_PASSWORD),
|
|
|
+ elastic.SetTraceLog(log.New(logFile, "ES-TRACE: ", 0)),
|
|
|
+ elastic.SetSniff(false), elastic.SetErrorLog(errorlog))
|
|
|
+
|
|
|
+ var esIndex = "cygx_article"
|
|
|
+
|
|
|
+ //keyWordStr := "医疗"
|
|
|
+ //字段相等
|
|
|
+ queryString := elastic.NewQueryStringQuery("Title:医疗")
|
|
|
+ //.Analyzer("ik_smart")
|
|
|
+ highlight := elastic.NewHighlight()
|
|
|
+ highlight = highlight.Fields(elastic.NewHighlighterField("Title"), elastic.NewHighlighterField("BodyText"))
|
|
|
+ highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
|
|
|
+ request := client.Search(esIndex).Highlight(highlight).Query(queryString)
|
|
|
+
|
|
|
+ searchByMatch, err := request.Do(context.Background())
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("request.Do err:", err.Error())
|
|
|
+ return result, err
|
|
|
+ }
|
|
|
+ if searchByMatch.Hits != nil {
|
|
|
+ for _, v := range searchByMatch.Hits.Hits {
|
|
|
+ articleJson, _ := v.Source.MarshalJSON()
|
|
|
+ utils.FileLog.Info("%s", string(articleJson))
|
|
|
+ fmt.Println(string(articleJson))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func SearchByKeyWord(keyWord string) (result []*models.SearchItem, err error) {
|
|
|
+ fmt.Println("keyWord:", keyWord)
|
|
|
+ keyWord = "医药"
|
|
|
+ pageSize := 20
|
|
|
+ keyWordArr, err := GetIndustryMapNameSlice(keyWord)
|
|
|
+ keyWordArr = RemoveDuplicatesAndEmpty(keyWordArr)
|
|
|
+
|
|
|
+ fmt.Println(keyWordArr)
|
|
|
+ fmt.Println(" keyWordArr ")
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ go utils.SendEmail(utils.APPNAME+" "+utils.RunMode+"异常提醒:", "GetIndustryMapNameSlice:"+err.Error(), utils.EmailSendToUsers)
|
|
|
+ }
|
|
|
+ errorlog := log.New(os.Stdout, "APP", log.LstdFlags)
|
|
|
+ file := "./rdlucklog/eslog.log"
|
|
|
+ logFile, _ := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766)
|
|
|
+
|
|
|
+ client, err := elastic.NewClient(
|
|
|
+ elastic.SetURL(ES_URL),
|
|
|
+ elastic.SetBasicAuth(ES_USERNAME, ES_PASSWORD),
|
|
|
+ elastic.SetTraceLog(log.New(logFile, "ES-TRACE: ", 0)),
|
|
|
+ elastic.SetSniff(false), elastic.SetErrorLog(errorlog))
|
|
|
+
|
|
|
+ //var esIndex = "cygx_article"
|
|
|
+ var esIndex = "article_two"
|
|
|
+ searchMap := make(map[int]int)
|
|
|
+
|
|
|
+ //queryString := elastic.NewQueryStringQuery(`Title:医疗 BodyText:医疗`).Analyzer("ik_smart")
|
|
|
+
|
|
|
+ //queryTeerms:=elastic.NewTermsQuery("Title","医疗","费用")
|
|
|
+
|
|
|
+ //queryMatchPhrase:=elastic.NewMatchPhraseQuery("Title","费用")
|
|
|
+ //.Analyzer("ik_smart")
|
|
|
+ //.Analyzer("ik_smart")
|
|
|
+ //boolquery.Must(elastic.NewMatchQuery("Title", keyWord), elastic.NewMatchQuery("BodyText", keyWord))
|
|
|
+ mapping := client.GetMapping()
|
|
|
+ mapJson, err := json.Marshal(mapping)
|
|
|
+ utils.FileLog.Info("%s", string(mapJson))
|
|
|
+ boolquery := elastic.NewBoolQuery()
|
|
|
+
|
|
|
+ keyLen := len(keyWordArr)
|
|
|
+ n := float64(keyLen)
|
|
|
+ matchArr := make([]elastic.Query, 0)
|
|
|
+ for _, v := range keyWordArr {
|
|
|
+ if v != "" {
|
|
|
+ matchq1 := elastic.NewMatchQuery("Title", v).Boost(n).Analyzer("ik_smart")
|
|
|
+ matchq2 := elastic.NewMatchQuery("BodyText", v).Boost(n).Analyzer("ik_smart")
|
|
|
+ matchArr = append(matchArr, matchq1)
|
|
|
+ matchArr = append(matchArr, matchq2)
|
|
|
+ }
|
|
|
+ n--
|
|
|
+ }
|
|
|
+ //matchArr=append(matchArr,matchq1)
|
|
|
+ //matchArr=append(matchArr,matchq2)
|
|
|
+
|
|
|
+ boolquery.Should(matchArr...)
|
|
|
+ //boolquery.Must(elastic.NewMatchQuery("BodyText", keyWord).Boost(1).Analyzer("ik_smart"))
|
|
|
+
|
|
|
+ highlight := elastic.NewHighlight()
|
|
|
+ highlight = highlight.Fields(elastic.NewHighlighterField("Title"), elastic.NewHighlighterField("BodyText"))
|
|
|
+ highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
|
|
|
+ //request := client.Search(esIndex).Highlight(highlight).Size(pageSize).Query(queryString)
|
|
|
+ request := client.Search(esIndex).Highlight(highlight).Size(pageSize).Query(boolquery)
|
|
|
+ searchByMatch, err := request.Do(context.Background())
|
|
|
+ fmt.Println(searchByMatch, err)
|
|
|
+ //searchByMatch, err := client.Search(esIndex).Highlight(highlight).Size(pageSize).Do(context.Background())
|
|
|
+ if err != nil {
|
|
|
+ return result, err
|
|
|
+ }
|
|
|
+ fmt.Println(searchByMatch.Status, searchByMatch.TotalHits())
|
|
|
+ if searchByMatch.Hits != nil {
|
|
|
+ for _, v := range searchByMatch.Hits.Hits {
|
|
|
+ articleJson, err := v.Source.MarshalJSON()
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ article := new(models.CygxArticle)
|
|
|
+ err = json.Unmarshal(articleJson, &article)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ if _, ok := searchMap[article.ArticleId]; !ok {
|
|
|
+ searchItem := new(models.SearchItem)
|
|
|
+ searchItem.ArticleId, _ = strconv.Atoi(v.Id)
|
|
|
+ searchItem.Body = v.Highlight["BodyText"]
|
|
|
+ var title string
|
|
|
+ if len(v.Highlight["Title"]) > 0 {
|
|
|
+ title = v.Highlight["Title"][0]
|
|
|
+ } else {
|
|
|
+ title = article.Title
|
|
|
+ }
|
|
|
+ searchItem.Title = title
|
|
|
+ searchItem.PublishDate = article.PublishDate
|
|
|
+ result = append(result, searchItem)
|
|
|
+ searchMap[article.ArticleId] = article.ArticleId
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func AddMap() {
|
|
|
+ errorlog := log.New(os.Stdout, "APP", log.LstdFlags)
|
|
|
+ file := "./rdlucklog/eslog.log"
|
|
|
+ logFile, _ := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766)
|
|
|
+
|
|
|
+ client, err := elastic.NewClient(
|
|
|
+ elastic.SetURL(ES_URL),
|
|
|
+ elastic.SetBasicAuth(ES_USERNAME, ES_PASSWORD),
|
|
|
+ elastic.SetTraceLog(log.New(logFile, "ES-TRACE: ", 0)),
|
|
|
+ elastic.SetSniff(false), elastic.SetErrorLog(errorlog))
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("NewClient Err:", err.Error())
|
|
|
+ }
|
|
|
+
|
|
|
+ bodyJson := `{
|
|
|
+ "mappings": {
|
|
|
+ "properties": {
|
|
|
+ "ArticleId": {
|
|
|
+ "type": "integer"
|
|
|
+ },
|
|
|
+ "Title": {
|
|
|
+ "type": "text",
|
|
|
+ "analyzer": "ik_smart"
|
|
|
+ },
|
|
|
+ "BodyText": {
|
|
|
+ "type": "text",
|
|
|
+ "analyzer": "ik_smart"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}`
|
|
|
+ //var esMappingIndex = "article_mapping"
|
|
|
+ var esIndex = "article_two"
|
|
|
+
|
|
|
+ exists, err := client.IndexExists(esIndex).Do(context.Background()) //<5>
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("IndexExists Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fmt.Println("exists:", exists)
|
|
|
+ if !exists {
|
|
|
+ _, err = client.CreateIndex(esIndex).BodyJson(bodyJson).Do(context.Background())
|
|
|
+ //BodyJson(bodyJson).Do(context.Background())
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("CreateIndex Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ item, err := models.GetArticleDetailTestById(3584)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("GetArticleDetailById Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ content := html.UnescapeString(item.Body)
|
|
|
+ doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("create doc err:", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ bodyText := doc.Text()
|
|
|
+ item.BodyText = bodyText
|
|
|
+ //新增
|
|
|
+ resp, err := client.Index().Index(esIndex).Id(strconv.Itoa(item.ArticleId)).BodyJson(item).Do(context.Background())
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("insert es failed", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fmt.Println(resp)
|
|
|
+ //mappping := make(map[string]interface{})
|
|
|
+ //mappping[esMappingIndex] = bodyJson
|
|
|
+ //putResult,err:=client.PutMapping().Index(esIndex).BodyJson(mappping).Do(context.Background())
|
|
|
+ //mapping,err := client.GetMapping().Index(esIndex).Do(context.Background())
|
|
|
+ //fmt.Println(mapping)
|
|
|
+ //mapJson, err := json.Marshal(mapping)
|
|
|
+ //utils.FileLog.Info("%s", string(mapJson))
|
|
|
+ //fmt.Println(esMappingIndex)
|
|
|
+ //
|
|
|
+ //fmt.Println(err)
|
|
|
+ //fmt.Println(putResult)
|
|
|
+}
|