elasticsearch.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. package services
  2. import (
  3. "context"
  4. "fmt"
  5. "hongze/hongze_cygx/models"
  6. "hongze/hongze_cygx/utils"
  7. "strconv"
  8. //"gopkg.in/olivere/elastic.v5"
  9. //"gopkg.in/olivere/elastic.v5/config"
  10. "github.com/olivere/elastic/v7"
  11. "github.com/olivere/elastic/v7/config"
  12. )
  13. const (
  14. ES_URL = "http://es-cn-nif227b580019rgw6.public.elasticsearch.aliyuncs.com:9200" //<1>
  15. ES_USERNAME = "elastic" //<2>
  16. ES_PASSWORD = "hongze@2021" //<3>
  17. //Grafana pwd-> 20521bb9
  18. //Grafana username-> emon
  19. )
  20. func SaveData() {
  21. //fmt.Println("start")
  22. var sniff = false //<4>
  23. cfg := &config.Config{
  24. URL: ES_URL,
  25. Username: ES_USERNAME,
  26. Password: ES_PASSWORD,
  27. }
  28. cfg.Sniff = &sniff
  29. var client, err = elastic.NewClientFromConfig(cfg)
  30. if err != nil {
  31. fmt.Println("NewClientFromConfig Err:" + err.Error())
  32. return
  33. }
  34. var esIndex = "cygx_article"
  35. //var esType = "article"
  36. //
  37. exists, err := client.IndexExists(esIndex).Do(context.Background()) //<5>
  38. if err != nil {
  39. fmt.Println("IndexExists Err:" + err.Error())
  40. return
  41. }
  42. if !exists {
  43. _, err = client.CreateIndex(esIndex).Do(context.Background())
  44. if err != nil {
  45. fmt.Println("CreateIndex Err:" + err.Error())
  46. return
  47. }
  48. }
  49. //item, err := models.GetArticleDetailById(3138)
  50. //if err != nil {
  51. // fmt.Println("GetArticleDetailById Err:" + err.Error())
  52. // return
  53. //}
  54. //
  55. ////插入一条数据,id指定为对应的name,若不指定则随机生成
  56. //resp, err := client.Index().Index(esIndex).Id(strconv.Itoa(item.ArticleId)).BodyJson(item).Do(context.Background())
  57. //if err != nil {
  58. // fmt.Println("insert es failed", err.Error())
  59. // return
  60. //}
  61. //fmt.Println(resp.Status)
  62. /*
  63. //根据id查询
  64. searchById, err := client.Get().Index(esIndex).Type(esType).Id("3138").Do(context.Background())
  65. if searchById.Found {
  66. body, err := searchById.Source.MarshalJSON()
  67. fmt.Println("body:",string(body))
  68. fmt.Println(err)
  69. //var resultType models.ArticleDetail
  70. //if err := json.Unmarshal(searchById.Source,&resultType); err != nil{
  71. // log.Error(err.Error())
  72. //}
  73. //fmt.Printf("search by id: %#v \n",resultType)
  74. }
  75. */
  76. ////查询index中所有的数据
  77. //var resultType models.CygxArticle
  78. //searchAll,err := client.Search(esIndex).Type(esType).Do(context.Background())
  79. //for _,item := range searchAll.Each(reflect.TypeOf(resultType)) {
  80. // language := item.(models.CygxArticle)
  81. // fmt.Printf("search by index all: %#v \n",language)
  82. //}
  83. //根据检索条件查询
  84. boolquery := elastic.NewBoolQuery()
  85. boolquery.Should(elastic.NewMatchQuery("Body", "专家"))
  86. highlight := elastic.NewHighlight()
  87. highlight = highlight.Fields(elastic.NewHighlighterField("Body"))
  88. highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
  89. var pageSize int
  90. pageSize = 20
  91. searchByMatch, err := client.Search(esIndex).Highlight(highlight).Size(pageSize).Query(boolquery).Do(context.Background())
  92. var result string
  93. if searchByMatch.Hits != nil {
  94. }
  95. //fmt.Println(string(result))
  96. utils.FileLog.Info("%s", string(result))
  97. //var resultType models.CygxArticle
  98. //for k,item := range searchByMatch.Each(reflect.TypeOf(resultType)) {
  99. // language := item.(models.CygxArticle)
  100. // fmt.Printf("search by match: %#v \n",language)
  101. //
  102. // fmt.Println(k)
  103. // result,err:=json.Marshal(language)
  104. // fmt.Println(err)
  105. // utils.FileLog.Info("%s",string(result))
  106. //}
  107. // Perform the search request.
  108. //searchByMatch, err := client.Search(esIndex).Type(esType).Query(query).From(1).Size(10).Do(context.Background())
  109. fmt.Println("end")
  110. }
  111. func SearchByKeyWord(keyWord string, pageSize int) (result []*models.SearchItem, err error) {
  112. if pageSize == 0 {
  113. pageSize = 20
  114. }
  115. var sniff = false //<4>
  116. cfg := &config.Config{
  117. URL: ES_URL,
  118. Username: ES_USERNAME,
  119. Password: ES_PASSWORD,
  120. }
  121. cfg.Sniff = &sniff
  122. client, err := elastic.NewClientFromConfig(cfg)
  123. if err != nil {
  124. return
  125. }
  126. var esIndex = "cygx_article"
  127. boolquery := elastic.NewBoolQuery()
  128. boolquery.Should(elastic.NewMatchQuery("Body", keyWord))
  129. highlight := elastic.NewHighlight()
  130. highlight = highlight.Fields(elastic.NewHighlighterField("Body"))
  131. highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
  132. searchByMatch, err := client.Search(esIndex).Highlight(highlight).Size(pageSize).Query(boolquery).Do(context.Background())
  133. if err != nil {
  134. return
  135. }
  136. if searchByMatch.Hits != nil {
  137. for _, v := range searchByMatch.Hits.Hits {
  138. searchItem := new(models.SearchItem)
  139. searchItem.ArticleId, _ = strconv.Atoi(v.Id)
  140. searchItem.Body = v.Highlight["Body"]
  141. result = append(result, searchItem)
  142. }
  143. }
  144. return
  145. }