elasticsearch.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642
  1. package services
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "github.com/PuerkitoBio/goquery"
  7. "github.com/olivere/elastic/v7"
  8. "github.com/olivere/elastic/v7/config"
  9. "hongze/hongze_cygx/models"
  10. "hongze/hongze_cygx/utils"
  11. "html"
  12. "log"
  13. "os"
  14. "strconv"
  15. "strings"
  16. )
  17. const (
  18. ES_URL = "http://es-cn-nif227b580019rgw6.public.elasticsearch.aliyuncs.com:9200" //<1>
  19. ES_USERNAME = "elastic" //<2>
  20. ES_PASSWORD = "hongze@2021" //<3>
  21. //Grafana pwd-> 20521bb9
  22. //Grafana username-> emon
  23. )
  24. func SaveData() {
  25. //fmt.Println("start")
  26. var sniff = false //<4>
  27. cfg := &config.Config{
  28. URL: ES_URL,
  29. Username: ES_USERNAME,
  30. Password: ES_PASSWORD,
  31. }
  32. cfg.Sniff = &sniff
  33. var client, err = elastic.NewClientFromConfig(cfg)
  34. if err != nil {
  35. fmt.Println("NewClientFromConfig Err:" + err.Error())
  36. return
  37. }
  38. var esIndex = "cygx_article"
  39. //var esType = "article"
  40. //
  41. exists, err := client.IndexExists(esIndex).Do(context.Background()) //<5>
  42. if err != nil {
  43. fmt.Println("IndexExists Err:" + err.Error())
  44. return
  45. }
  46. if !exists {
  47. _, err = client.CreateIndex(esIndex).Do(context.Background())
  48. if err != nil {
  49. fmt.Println("CreateIndex Err:" + err.Error())
  50. return
  51. }
  52. }
  53. /*
  54. 3161,3190,3226,3244,3264,3285,3310,3334,3370,3397,3418,3446,3477,3497,3526,3554
  55. */
  56. idStr := `3584,3644`
  57. idArr := strings.Split(idStr, ",")
  58. for _, v := range idArr {
  59. id, _ := strconv.Atoi(v)
  60. item, err := models.GetArticleDetailById(id)
  61. if err != nil {
  62. fmt.Println("GetArticleDetailById Err:" + err.Error())
  63. return
  64. }
  65. content := html.UnescapeString(item.Body)
  66. doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
  67. if err != nil {
  68. fmt.Println("create doc err:", err.Error())
  69. return
  70. }
  71. bodyText := doc.Text()
  72. item.BodyText = bodyText
  73. //新增
  74. resp, err := client.Index().Index(esIndex).Id(strconv.Itoa(item.ArticleId)).BodyJson(item).Do(context.Background())
  75. if err != nil {
  76. fmt.Println("insert es failed", err.Error())
  77. return
  78. }
  79. fmt.Println(resp.Status)
  80. }
  81. /*
  82. //根据id查询
  83. searchById, err := client.Get().Index(esIndex).Type(esType).Id("3138").Do(context.Background())
  84. if searchById.Found {
  85. body, err := searchById.Source.MarshalJSON()
  86. fmt.Println("body:",string(body))
  87. fmt.Println(err)
  88. //var resultType models.ArticleDetail
  89. //if err := json.Unmarshal(searchById.Source,&resultType); err != nil{
  90. // log.Error(err.Error())
  91. //}
  92. //fmt.Printf("search by id: %#v \n",resultType)
  93. }
  94. */
  95. ////查询index中所有的数据
  96. //var resultType models.CygxArticle
  97. //searchAll,err := client.Search(esIndex).Type(esType).Do(context.Background())
  98. //for _,item := range searchAll.Each(reflect.TypeOf(resultType)) {
  99. // language := item.(models.CygxArticle)
  100. // fmt.Printf("search by index all: %#v \n",language)
  101. //}
  102. //根据检索条件查询
  103. // boolquery := elastic.NewBoolQuery()
  104. // boolquery.Should(elastic.NewMatchQuery("Body", "专家"))
  105. // highlight := elastic.NewHighlight()
  106. // highlight = highlight.Fields(elastic.NewHighlighterField("Body"))
  107. // highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
  108. // var pageSize int
  109. // pageSize = 20
  110. // searchByMatch, err := client.Search(esIndex).Highlight(highlight).Size(pageSize).Query(boolquery).Do(context.Background())
  111. // var result string
  112. // if searchByMatch.Hits != nil {
  113. // }
  114. // //fmt.Println(string(result))
  115. // utils.FileLog.Info("%s", string(result))
  116. //var resultType models.CygxArticle
  117. //for k,item := range searchByMatch.Each(reflect.TypeOf(resultType)) {
  118. // language := item.(models.CygxArticle)
  119. // fmt.Printf("search by match: %#v \n",language)
  120. //
  121. // fmt.Println(k)
  122. // result,err:=json.Marshal(language)
  123. // fmt.Println(err)
  124. // utils.FileLog.Info("%s",string(result))
  125. //}
  126. // Perform the search request.
  127. //searchByMatch, err := client.Search(esIndex).Type(esType).Query(query).From(1).Size(10).Do(context.Background())
  128. fmt.Println("end")
  129. }
  130. type tracelog struct{}
  131. //实现输出
  132. func (tracelog) Printf(format string, v ...interface{}) {
  133. fmt.Printf(format, v...)
  134. }
  135. func SearchByKeyWordBack02(keyWord string) (result []*models.SearchItem, err error) {
  136. fmt.Println("keyWord:", keyWord)
  137. pageSize := 20
  138. keyWordArr, err := GetIndustryMapNameSlice(keyWord)
  139. keyWordArr = RemoveDuplicatesAndEmpty(keyWordArr)
  140. fmt.Println(keyWordArr)
  141. fmt.Println(" keyWordArr ")
  142. if err != nil {
  143. go utils.SendEmail(utils.APPNAME+" "+utils.RunMode+"异常提醒:", "GetIndustryMapNameSlice:"+err.Error(), utils.EmailSendToUsers)
  144. }
  145. //var sniff = false //<4>
  146. //cfg := &config.Config{
  147. // URL: ES_URL,
  148. // Username: ES_USERNAME,
  149. // Password: ES_PASSWORD,
  150. //}
  151. //
  152. //cfg.Sniff = &sniff
  153. //client, err := elastic.NewClientFromConfig(cfg)
  154. errorlog := log.New(os.Stdout, "APP", log.LstdFlags)
  155. file := "./eslog.log"
  156. logFile, _ := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766)
  157. client, err := elastic.NewClient(
  158. elastic.SetURL(ES_URL),
  159. elastic.SetBasicAuth(ES_USERNAME, ES_PASSWORD),
  160. elastic.SetTraceLog(log.New(logFile, "ES-TRACE: ", 0)),
  161. elastic.SetSniff(false), elastic.SetErrorLog(errorlog))
  162. var esIndex = "cygx_article"
  163. searchMap := make(map[int]int)
  164. //boolquery := elastic.NewBoolQuery()
  165. //keyWordLen := len(keyWordArr)
  166. //n := keyWordLen
  167. //for _, v := range keyWordArr {
  168. // keyWord = v
  169. // boost := float64(n)
  170. // fmt.Println("keyWord:", keyWord)
  171. // fmt.Println("boost:", boost)
  172. // //matchQueryList = append(matchQueryList, elastic.NewMatchQuery("Title", keyWord).Boost(boost+0.2))
  173. // //matchQueryList = append(matchQueryList, elastic.NewMatchQuery("BodyText", keyWord).Boost(boost+0.1))
  174. // q1 := elastic.NewMatchQuery("Title", keyWord)
  175. // q1 = q1.Boost(boost + 0.2)
  176. // q2 := elastic.NewMatchQuery("BodyText", keyWord)
  177. // q2 = q2.Boost(boost + 0.1)
  178. // boolquery.Should(q1, q2)
  179. // n--
  180. //}
  181. keyWordStr := strings.Join(keyWordArr, ",")
  182. fmt.Println("keyWordStr ", keyWordStr)
  183. queryString := elastic.NewQueryStringQuery(`Title:(` + keyWordStr + `) BodyText:(` + keyWordStr + `)`).Analyzer("ik_smart")
  184. boolqueryJson, err := json.Marshal(queryString)
  185. fmt.Println("err:", err)
  186. fmt.Println("queryString ", string(boolqueryJson))
  187. //boolquery.Must(elastic.NewMatchQuery("Title", keyWord), elastic.NewMatchQuery("BodyText", keyWord))
  188. highlight := elastic.NewHighlight()
  189. highlight = highlight.Fields(elastic.NewHighlighterField("Title"), elastic.NewHighlighterField("BodyText"))
  190. highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
  191. request := client.Search(esIndex).Highlight(highlight).Size(pageSize).Query(queryString)
  192. requestJson, err := json.Marshal(request)
  193. fmt.Println("err:", err)
  194. fmt.Println("requestJson ", string(requestJson))
  195. searchByMatch, err := request.Do(context.Background())
  196. //searchByMatch, err := client.Search(esIndex).Highlight(highlight).Size(pageSize).Do(context.Background())
  197. if err != nil {
  198. return result, err
  199. }
  200. if searchByMatch.Hits != nil {
  201. for _, v := range searchByMatch.Hits.Hits {
  202. articleJson, err := v.Source.MarshalJSON()
  203. if err != nil {
  204. return nil, err
  205. }
  206. article := new(models.CygxArticle)
  207. err = json.Unmarshal(articleJson, &article)
  208. if err != nil {
  209. return nil, err
  210. }
  211. if _, ok := searchMap[article.ArticleId]; !ok {
  212. searchItem := new(models.SearchItem)
  213. searchItem.ArticleId, _ = strconv.Atoi(v.Id)
  214. searchItem.Body = v.Highlight["BodyText"]
  215. var title string
  216. if len(v.Highlight["Title"]) > 0 {
  217. title = v.Highlight["Title"][0]
  218. } else {
  219. title = article.Title
  220. }
  221. searchItem.Title = title
  222. searchItem.PublishDate = article.PublishDate
  223. result = append(result, searchItem)
  224. searchMap[article.ArticleId] = article.ArticleId
  225. }
  226. }
  227. }
  228. return
  229. }
  230. func SearchByKeyWordBack(indexName,keyWord string,startSize, pageSize,userId int) (result []*models.SearchItem,total int, err error) {
  231. keyWordArr, err := GetIndustryMapNameSlice(keyWord)
  232. if err != nil {
  233. go utils.SendEmail(utils.APPNAME+" "+utils.RunMode+"异常提醒:", "GetIndustryMapNameSlice:"+err.Error(), utils.EmailSendToUsers)
  234. }
  235. var sniff = false //<4>
  236. cfg := &config.Config{
  237. URL: ES_URL,
  238. Username: ES_USERNAME,
  239. Password: ES_PASSWORD,
  240. }
  241. cfg.Sniff = &sniff
  242. client, err := elastic.NewClientFromConfig(cfg)
  243. if err != nil {
  244. return
  245. }
  246. var esIndex = indexName
  247. searchMap := make(map[int]int)
  248. for _, v := range keyWordArr {
  249. keyWord = v
  250. boolquery := elastic.NewBoolQuery()
  251. boolquery.Must(elastic.NewMatchQuery("Title", keyWord), elastic.NewMatchQuery("BodyText", keyWord))
  252. highlight := elastic.NewHighlight()
  253. highlight = highlight.Fields(elastic.NewHighlighterField("Title"), elastic.NewHighlighterField("BodyText"))
  254. highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
  255. searchByMatch, err := client.Search(esIndex).Highlight(highlight).Size(pageSize).Query(boolquery).Do(context.Background())
  256. if err != nil {
  257. return result,0, err
  258. }
  259. if searchByMatch.Hits != nil {
  260. for _, v := range searchByMatch.Hits.Hits {
  261. articleJson, err := v.Source.MarshalJSON()
  262. if err != nil {
  263. return nil,0, err
  264. }
  265. article := new(models.CygxArticle)
  266. err = json.Unmarshal(articleJson, &article)
  267. if err != nil {
  268. return nil,0, err
  269. }
  270. if _, ok := searchMap[article.ArticleId]; !ok {
  271. searchItem := new(models.SearchItem)
  272. searchItem.ArticleId, _ = strconv.Atoi(v.Id)
  273. searchItem.Body = v.Highlight["BodyText"]
  274. var title string
  275. if len(v.Highlight["Title"]) > 0 {
  276. title = v.Highlight["Title"][0]
  277. } else {
  278. title = article.Title
  279. }
  280. searchItem.Title = title
  281. searchItem.PublishDate = article.PublishDate
  282. result = append(result, searchItem)
  283. searchMap[article.ArticleId] = article.ArticleId
  284. }
  285. }
  286. }
  287. }
  288. return
  289. }
  290. func esSearch(keyWord, categoryName string) (result []*models.SearchItem, err error) {
  291. pageSize := 20
  292. var sniff = false //<4>
  293. cfg := &config.Config{
  294. URL: ES_URL,
  295. Username: ES_USERNAME,
  296. Password: ES_PASSWORD,
  297. }
  298. cfg.Sniff = &sniff
  299. client, err := elastic.NewClientFromConfig(cfg)
  300. if err != nil {
  301. return
  302. }
  303. var esIndex = "cygx_article"
  304. termsQuery := elastic.NewTermsQuery("category_name", categoryName)
  305. boolquery := elastic.NewBoolQuery()
  306. boolquery.Must(elastic.NewMatchQuery("Title", keyWord), elastic.NewMatchQuery("BodyText", keyWord))
  307. highlight := elastic.NewHighlight()
  308. highlight = highlight.Fields(elastic.NewHighlighterField("Title"), elastic.NewHighlighterField("BodyText"))
  309. highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
  310. searchByMatch, err := client.Search(esIndex).Highlight(highlight).Size(pageSize).Query(termsQuery).Query(boolquery).Do(context.Background())
  311. if err != nil {
  312. return result, err
  313. }
  314. searchMap := make(map[int]int)
  315. if searchByMatch.Hits != nil {
  316. for _, v := range searchByMatch.Hits.Hits {
  317. articleJson, err := v.Source.MarshalJSON()
  318. if err != nil {
  319. return nil, err
  320. }
  321. article := new(models.CygxArticle)
  322. err = json.Unmarshal(articleJson, &article)
  323. if err != nil {
  324. return nil, err
  325. }
  326. if _, ok := searchMap[article.ArticleId]; !ok {
  327. searchItem := new(models.SearchItem)
  328. searchItem.ArticleId, _ = strconv.Atoi(v.Id)
  329. searchItem.Body = v.Highlight["BodyText"]
  330. var title string
  331. if len(v.Highlight["Title"]) > 0 {
  332. title = v.Highlight["Title"][0]
  333. } else {
  334. title = article.Title
  335. }
  336. searchItem.Title = title
  337. searchItem.PublishDate = article.PublishDate
  338. result = append(result, searchItem)
  339. searchMap[article.ArticleId] = article.ArticleId
  340. }
  341. }
  342. }
  343. return
  344. }
  345. func RemoveDuplicatesAndEmpty(a []string) (ret []string) {
  346. a_len := len(a)
  347. for i := 0; i < a_len; i++ {
  348. if (i > 0 && a[i-1] == a[i]) || len(a[i]) == 0 {
  349. continue
  350. }
  351. ret = append(ret, a[i])
  352. }
  353. return
  354. }
  355. func init21123() {
  356. fmt.Println("start")
  357. client, err := elastic.NewClient(elastic.SetURL(ES_URL), elastic.SetBasicAuth(ES_USERNAME, ES_PASSWORD), elastic.SetSniff(false))
  358. if err != nil {
  359. fmt.Println("err:", err)
  360. }
  361. fmt.Println(client)
  362. keyWordStr := "医疗器械"
  363. queryString := elastic.NewQueryStringQuery(`Title:(` + keyWordStr + `)`)
  364. boolqueryJson, err := json.Marshal(queryString)
  365. fmt.Println("err:", err)
  366. fmt.Println("queryString ", string(boolqueryJson))
  367. var esIndex = "cygx_article"
  368. //boolquery.Must(elastic.NewMatchQuery("Title", keyWord), elastic.NewMatchQuery("BodyText", keyWord))
  369. highlight := elastic.NewHighlight()
  370. highlight = highlight.Fields(elastic.NewHighlighterField("Title"), elastic.NewHighlighterField("BodyText"))
  371. highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
  372. request := client.Search(esIndex).Highlight(highlight).Query(queryString)
  373. requestJson, err := json.Marshal(request)
  374. fmt.Println("err:", err)
  375. fmt.Println("requestJson ", string(requestJson))
  376. searchByMatch, err := request.Do(context.Background())
  377. if searchByMatch.Hits != nil {
  378. }
  379. fmt.Println(searchByMatch)
  380. fmt.Println("end")
  381. }
  382. func SearchByKeyWordQuery(keyWord string) (result []*models.SearchItem, err error) {
  383. errorlog := log.New(os.Stdout, "APP", log.LstdFlags)
  384. file := "./rdlucklog/eslog.log"
  385. logFile, _ := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766)
  386. client, err := elastic.NewClient(
  387. elastic.SetURL(ES_URL),
  388. elastic.SetBasicAuth(ES_USERNAME, ES_PASSWORD),
  389. elastic.SetTraceLog(log.New(logFile, "ES-TRACE: ", 0)),
  390. elastic.SetSniff(false), elastic.SetErrorLog(errorlog))
  391. var esIndex = "cygx_article"
  392. //keyWordStr := "医疗"
  393. //字段相等
  394. queryString := elastic.NewQueryStringQuery("Title:医疗")
  395. //.Analyzer("ik_smart")
  396. highlight := elastic.NewHighlight()
  397. highlight = highlight.Fields(elastic.NewHighlighterField("Title"), elastic.NewHighlighterField("BodyText"))
  398. highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
  399. request := client.Search(esIndex).Highlight(highlight).Query(queryString)
  400. searchByMatch, err := request.Do(context.Background())
  401. if err != nil {
  402. fmt.Println("request.Do err:", err.Error())
  403. return result, err
  404. }
  405. if searchByMatch.Hits != nil {
  406. for _, v := range searchByMatch.Hits.Hits {
  407. articleJson, _ := v.Source.MarshalJSON()
  408. fmt.Println(string(articleJson))
  409. }
  410. }
  411. return
  412. }
  413. func SearchByKeyWord(keyWord string) (result []*models.SearchItem, err error) {
  414. fmt.Println("keyWord:", keyWord)
  415. keyWord = "医药"
  416. pageSize := 20
  417. keyWordArr, err := GetIndustryMapNameSlice(keyWord)
  418. keyWordArr = RemoveDuplicatesAndEmpty(keyWordArr)
  419. fmt.Println(keyWordArr)
  420. fmt.Println(" keyWordArr ")
  421. if err != nil {
  422. go utils.SendEmail(utils.APPNAME+" "+utils.RunMode+"异常提醒:", "GetIndustryMapNameSlice:"+err.Error(), utils.EmailSendToUsers)
  423. }
  424. errorlog := log.New(os.Stdout, "APP", log.LstdFlags)
  425. file := "./rdlucklog/eslog.log"
  426. logFile, _ := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766)
  427. client, err := elastic.NewClient(
  428. elastic.SetURL(ES_URL),
  429. elastic.SetBasicAuth(ES_USERNAME, ES_PASSWORD),
  430. elastic.SetTraceLog(log.New(logFile, "ES-TRACE: ", 0)),
  431. elastic.SetSniff(false), elastic.SetErrorLog(errorlog))
  432. //var esIndex = "cygx_article"
  433. var esIndex = "article_two"
  434. searchMap := make(map[int]int)
  435. //queryString := elastic.NewQueryStringQuery(`Title:医疗 BodyText:医疗`).Analyzer("ik_smart")
  436. //queryTeerms:=elastic.NewTermsQuery("Title","医疗","费用")
  437. //queryMatchPhrase:=elastic.NewMatchPhraseQuery("Title","费用")
  438. //.Analyzer("ik_smart")
  439. //.Analyzer("ik_smart")
  440. //boolquery.Must(elastic.NewMatchQuery("Title", keyWord), elastic.NewMatchQuery("BodyText", keyWord))
  441. boolquery := elastic.NewBoolQuery()
  442. keyLen := len(keyWordArr)
  443. n := float64(keyLen)
  444. matchArr := make([]elastic.Query, 0)
  445. for _, v := range keyWordArr {
  446. if v != "" {
  447. matchq1 := elastic.NewMatchQuery("Title", v).Boost(n).Analyzer("ik_smart")
  448. matchq2 := elastic.NewMatchQuery("BodyText", v).Boost(n).Analyzer("ik_smart")
  449. matchArr = append(matchArr, matchq1)
  450. matchArr = append(matchArr, matchq2)
  451. }
  452. n--
  453. }
  454. //matchArr=append(matchArr,matchq1)
  455. //matchArr=append(matchArr,matchq2)
  456. boolquery.Should(matchArr...)
  457. //boolquery.Must(elastic.NewMatchQuery("BodyText", keyWord).Boost(1).Analyzer("ik_smart"))
  458. highlight := elastic.NewHighlight()
  459. highlight = highlight.Fields(elastic.NewHighlighterField("Title"), elastic.NewHighlighterField("BodyText"))
  460. highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
  461. //request := client.Search(esIndex).Highlight(highlight).Size(pageSize).Query(queryString)
  462. request := client.Search(esIndex).Highlight(highlight).Size(pageSize).Query(boolquery)
  463. searchByMatch, err := request.Do(context.Background())
  464. fmt.Println(searchByMatch, err)
  465. //searchByMatch, err := client.Search(esIndex).Highlight(highlight).Size(pageSize).Do(context.Background())
  466. if err != nil {
  467. return result, err
  468. }
  469. fmt.Println(searchByMatch.Status, searchByMatch.TotalHits())
  470. if searchByMatch.Hits != nil {
  471. for _, v := range searchByMatch.Hits.Hits {
  472. articleJson, err := v.Source.MarshalJSON()
  473. if err != nil {
  474. return nil, err
  475. }
  476. article := new(models.CygxArticle)
  477. err = json.Unmarshal(articleJson, &article)
  478. if err != nil {
  479. return nil, err
  480. }
  481. if _, ok := searchMap[article.ArticleId]; !ok {
  482. searchItem := new(models.SearchItem)
  483. searchItem.ArticleId, _ = strconv.Atoi(v.Id)
  484. searchItem.Body = v.Highlight["BodyText"]
  485. var title string
  486. if len(v.Highlight["Title"]) > 0 {
  487. title = v.Highlight["Title"][0]
  488. } else {
  489. title = article.Title
  490. }
  491. searchItem.Title = title
  492. searchItem.PublishDate = article.PublishDate
  493. result = append(result, searchItem)
  494. searchMap[article.ArticleId] = article.ArticleId
  495. }
  496. }
  497. }
  498. return
  499. }
  500. func AddMap() {
  501. errorlog := log.New(os.Stdout, "APP", log.LstdFlags)
  502. file := "./rdlucklog/eslog.log"
  503. logFile, _ := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766)
  504. client, err := elastic.NewClient(
  505. elastic.SetURL(ES_URL),
  506. elastic.SetBasicAuth(ES_USERNAME, ES_PASSWORD),
  507. elastic.SetTraceLog(log.New(logFile, "ES-TRACE: ", 0)),
  508. elastic.SetSniff(false), elastic.SetErrorLog(errorlog))
  509. if err != nil {
  510. fmt.Println("NewClient Err:", err.Error())
  511. }
  512. bodyJson := `{
  513. "mappings": {
  514. "properties": {
  515. "ArticleId": {
  516. "type": "integer"
  517. },
  518. "Title": {
  519. "type": "text",
  520. "analyzer": "ik_smart"
  521. },
  522. "BodyText": {
  523. "type": "text",
  524. "analyzer": "ik_smart"
  525. }
  526. }
  527. }
  528. }`
  529. //var esMappingIndex = "article_mapping"
  530. var esIndex = "article_two"
  531. a := client.IndexAnalyze().Index(esIndex)
  532. analyzeBody, err := json.Marshal(a)
  533. fmt.Println(string(analyzeBody))
  534. exists, err := client.IndexExists(esIndex).Do(context.Background()) //<5>
  535. if err != nil {
  536. fmt.Println("IndexExists Err:" + err.Error())
  537. return
  538. }
  539. fmt.Println("exists:", exists)
  540. if !exists {
  541. _, err = client.CreateIndex(esIndex).BodyJson(bodyJson).Do(context.Background())
  542. //BodyJson(bodyJson).Do(context.Background())
  543. if err != nil {
  544. fmt.Println("CreateIndex Err:" + err.Error())
  545. return
  546. }
  547. }
  548. item, err := models.GetArticleDetailTestById(3546)
  549. if err != nil {
  550. fmt.Println("GetArticleDetailById Err:" + err.Error())
  551. return
  552. }
  553. content := html.UnescapeString(item.Body)
  554. doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
  555. if err != nil {
  556. fmt.Println("create doc err:", err.Error())
  557. return
  558. }
  559. bodyText := doc.Text()
  560. item.BodyText = bodyText
  561. //新增
  562. resp, err := client.Index().Index(esIndex).Id(strconv.Itoa(item.ArticleId)).BodyJson(item).Do(context.Background())
  563. if err != nil {
  564. fmt.Println("insert es failed", err.Error())
  565. return
  566. }
  567. fmt.Println(resp)
  568. }