elasticsearch.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643
  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(keyWord string) (result []*models.SearchItem, err error) {
  231. pageSize := 20
  232. keyWordArr, err := GetIndustryMapNameSlice(keyWord)
  233. if err != nil {
  234. go utils.SendEmail(utils.APPNAME+" "+utils.RunMode+"异常提醒:", "GetIndustryMapNameSlice:"+err.Error(), utils.EmailSendToUsers)
  235. }
  236. var sniff = false //<4>
  237. cfg := &config.Config{
  238. URL: ES_URL,
  239. Username: ES_USERNAME,
  240. Password: ES_PASSWORD,
  241. }
  242. cfg.Sniff = &sniff
  243. client, err := elastic.NewClientFromConfig(cfg)
  244. if err != nil {
  245. return
  246. }
  247. var esIndex = "cygx_article"
  248. searchMap := make(map[int]int)
  249. for _, v := range keyWordArr {
  250. keyWord = v
  251. boolquery := elastic.NewBoolQuery()
  252. boolquery.Must(elastic.NewMatchQuery("Title", keyWord), elastic.NewMatchQuery("BodyText", keyWord))
  253. highlight := elastic.NewHighlight()
  254. highlight = highlight.Fields(elastic.NewHighlighterField("Title"), elastic.NewHighlighterField("BodyText"))
  255. highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
  256. searchByMatch, err := client.Search(esIndex).Highlight(highlight).Size(pageSize).Query(boolquery).Do(context.Background())
  257. if err != nil {
  258. return result, err
  259. }
  260. if searchByMatch.Hits != nil {
  261. for _, v := range searchByMatch.Hits.Hits {
  262. articleJson, err := v.Source.MarshalJSON()
  263. if err != nil {
  264. return nil, err
  265. }
  266. article := new(models.CygxArticle)
  267. err = json.Unmarshal(articleJson, &article)
  268. if err != nil {
  269. return nil, err
  270. }
  271. if _, ok := searchMap[article.ArticleId]; !ok {
  272. searchItem := new(models.SearchItem)
  273. searchItem.ArticleId, _ = strconv.Atoi(v.Id)
  274. searchItem.Body = v.Highlight["BodyText"]
  275. var title string
  276. if len(v.Highlight["Title"]) > 0 {
  277. title = v.Highlight["Title"][0]
  278. } else {
  279. title = article.Title
  280. }
  281. searchItem.Title = title
  282. searchItem.PublishDate = article.PublishDate
  283. result = append(result, searchItem)
  284. searchMap[article.ArticleId] = article.ArticleId
  285. }
  286. }
  287. }
  288. }
  289. return
  290. }
  291. func esSearch(keyWord, categoryName string) (result []*models.SearchItem, err error) {
  292. pageSize := 20
  293. var sniff = false //<4>
  294. cfg := &config.Config{
  295. URL: ES_URL,
  296. Username: ES_USERNAME,
  297. Password: ES_PASSWORD,
  298. }
  299. cfg.Sniff = &sniff
  300. client, err := elastic.NewClientFromConfig(cfg)
  301. if err != nil {
  302. return
  303. }
  304. var esIndex = "cygx_article"
  305. termsQuery := elastic.NewTermsQuery("category_name", categoryName)
  306. boolquery := elastic.NewBoolQuery()
  307. boolquery.Must(elastic.NewMatchQuery("Title", keyWord), elastic.NewMatchQuery("BodyText", keyWord))
  308. highlight := elastic.NewHighlight()
  309. highlight = highlight.Fields(elastic.NewHighlighterField("Title"), elastic.NewHighlighterField("BodyText"))
  310. highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
  311. searchByMatch, err := client.Search(esIndex).Highlight(highlight).Size(pageSize).Query(termsQuery).Query(boolquery).Do(context.Background())
  312. if err != nil {
  313. return result, err
  314. }
  315. searchMap := make(map[int]int)
  316. if searchByMatch.Hits != nil {
  317. for _, v := range searchByMatch.Hits.Hits {
  318. articleJson, err := v.Source.MarshalJSON()
  319. if err != nil {
  320. return nil, err
  321. }
  322. article := new(models.CygxArticle)
  323. err = json.Unmarshal(articleJson, &article)
  324. if err != nil {
  325. return nil, err
  326. }
  327. if _, ok := searchMap[article.ArticleId]; !ok {
  328. searchItem := new(models.SearchItem)
  329. searchItem.ArticleId, _ = strconv.Atoi(v.Id)
  330. searchItem.Body = v.Highlight["BodyText"]
  331. var title string
  332. if len(v.Highlight["Title"]) > 0 {
  333. title = v.Highlight["Title"][0]
  334. } else {
  335. title = article.Title
  336. }
  337. searchItem.Title = title
  338. searchItem.PublishDate = article.PublishDate
  339. result = append(result, searchItem)
  340. searchMap[article.ArticleId] = article.ArticleId
  341. }
  342. }
  343. }
  344. return
  345. }
  346. func RemoveDuplicatesAndEmpty(a []string) (ret []string) {
  347. a_len := len(a)
  348. for i := 0; i < a_len; i++ {
  349. if (i > 0 && a[i-1] == a[i]) || len(a[i]) == 0 {
  350. continue
  351. }
  352. ret = append(ret, a[i])
  353. }
  354. return
  355. }
  356. func init21123() {
  357. fmt.Println("start")
  358. client, err := elastic.NewClient(elastic.SetURL(ES_URL), elastic.SetBasicAuth(ES_USERNAME, ES_PASSWORD), elastic.SetSniff(false))
  359. if err != nil {
  360. fmt.Println("err:", err)
  361. }
  362. fmt.Println(client)
  363. keyWordStr := "医疗器械"
  364. queryString := elastic.NewQueryStringQuery(`Title:(` + keyWordStr + `)`)
  365. boolqueryJson, err := json.Marshal(queryString)
  366. fmt.Println("err:", err)
  367. fmt.Println("queryString ", string(boolqueryJson))
  368. var esIndex = "cygx_article"
  369. //boolquery.Must(elastic.NewMatchQuery("Title", keyWord), elastic.NewMatchQuery("BodyText", keyWord))
  370. highlight := elastic.NewHighlight()
  371. highlight = highlight.Fields(elastic.NewHighlighterField("Title"), elastic.NewHighlighterField("BodyText"))
  372. highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
  373. request := client.Search(esIndex).Highlight(highlight).Query(queryString)
  374. requestJson, err := json.Marshal(request)
  375. fmt.Println("err:", err)
  376. fmt.Println("requestJson ", string(requestJson))
  377. searchByMatch, err := request.Do(context.Background())
  378. if searchByMatch.Hits != nil {
  379. }
  380. fmt.Println(searchByMatch)
  381. fmt.Println("end")
  382. }
  383. func SearchByKeyWordQuery(keyWord string) (result []*models.SearchItem, err error) {
  384. errorlog := log.New(os.Stdout, "APP", log.LstdFlags)
  385. file := "./rdlucklog/eslog.log"
  386. logFile, _ := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766)
  387. client, err := elastic.NewClient(
  388. elastic.SetURL(ES_URL),
  389. elastic.SetBasicAuth(ES_USERNAME, ES_PASSWORD),
  390. elastic.SetTraceLog(log.New(logFile, "ES-TRACE: ", 0)),
  391. elastic.SetSniff(false), elastic.SetErrorLog(errorlog))
  392. var esIndex = "cygx_article"
  393. //keyWordStr := "医疗"
  394. //字段相等
  395. queryString := elastic.NewQueryStringQuery("Title:医疗")
  396. //.Analyzer("ik_smart")
  397. highlight := elastic.NewHighlight()
  398. highlight = highlight.Fields(elastic.NewHighlighterField("Title"), elastic.NewHighlighterField("BodyText"))
  399. highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
  400. request := client.Search(esIndex).Highlight(highlight).Query(queryString)
  401. searchByMatch, err := request.Do(context.Background())
  402. if err != nil {
  403. fmt.Println("request.Do err:", err.Error())
  404. return result, err
  405. }
  406. if searchByMatch.Hits != nil {
  407. for _, v := range searchByMatch.Hits.Hits {
  408. articleJson, _ := v.Source.MarshalJSON()
  409. fmt.Println(string(articleJson))
  410. }
  411. }
  412. return
  413. }
  414. func SearchByKeyWord(keyWord string) (result []*models.SearchItem, err error) {
  415. fmt.Println("keyWord:", keyWord)
  416. keyWord = "医药"
  417. pageSize := 20
  418. keyWordArr, err := GetIndustryMapNameSlice(keyWord)
  419. keyWordArr = RemoveDuplicatesAndEmpty(keyWordArr)
  420. fmt.Println(keyWordArr)
  421. fmt.Println(" keyWordArr ")
  422. if err != nil {
  423. go utils.SendEmail(utils.APPNAME+" "+utils.RunMode+"异常提醒:", "GetIndustryMapNameSlice:"+err.Error(), utils.EmailSendToUsers)
  424. }
  425. errorlog := log.New(os.Stdout, "APP", log.LstdFlags)
  426. file := "./rdlucklog/eslog.log"
  427. logFile, _ := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766)
  428. client, err := elastic.NewClient(
  429. elastic.SetURL(ES_URL),
  430. elastic.SetBasicAuth(ES_USERNAME, ES_PASSWORD),
  431. elastic.SetTraceLog(log.New(logFile, "ES-TRACE: ", 0)),
  432. elastic.SetSniff(false), elastic.SetErrorLog(errorlog))
  433. //var esIndex = "cygx_article"
  434. var esIndex = "article_two"
  435. searchMap := make(map[int]int)
  436. //queryString := elastic.NewQueryStringQuery(`Title:医疗 BodyText:医疗`).Analyzer("ik_smart")
  437. //queryTeerms:=elastic.NewTermsQuery("Title","医疗","费用")
  438. //queryMatchPhrase:=elastic.NewMatchPhraseQuery("Title","费用")
  439. //.Analyzer("ik_smart")
  440. //.Analyzer("ik_smart")
  441. //boolquery.Must(elastic.NewMatchQuery("Title", keyWord), elastic.NewMatchQuery("BodyText", keyWord))
  442. boolquery := elastic.NewBoolQuery()
  443. keyLen := len(keyWordArr)
  444. n := float64(keyLen)
  445. matchArr := make([]elastic.Query, 0)
  446. for _, v := range keyWordArr {
  447. if v != "" {
  448. matchq1 := elastic.NewMatchQuery("Title", v).Boost(n).Analyzer("ik_smart")
  449. matchq2 := elastic.NewMatchQuery("BodyText", v).Boost(n).Analyzer("ik_smart")
  450. matchArr = append(matchArr, matchq1)
  451. matchArr = append(matchArr, matchq2)
  452. }
  453. n--
  454. }
  455. //matchArr=append(matchArr,matchq1)
  456. //matchArr=append(matchArr,matchq2)
  457. boolquery.Should(matchArr...)
  458. //boolquery.Must(elastic.NewMatchQuery("BodyText", keyWord).Boost(1).Analyzer("ik_smart"))
  459. highlight := elastic.NewHighlight()
  460. highlight = highlight.Fields(elastic.NewHighlighterField("Title"), elastic.NewHighlighterField("BodyText"))
  461. highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
  462. //request := client.Search(esIndex).Highlight(highlight).Size(pageSize).Query(queryString)
  463. request := client.Search(esIndex).Highlight(highlight).Size(pageSize).Query(boolquery)
  464. searchByMatch, err := request.Do(context.Background())
  465. fmt.Println(searchByMatch, err)
  466. //searchByMatch, err := client.Search(esIndex).Highlight(highlight).Size(pageSize).Do(context.Background())
  467. if err != nil {
  468. return result, err
  469. }
  470. fmt.Println(searchByMatch.Status, searchByMatch.TotalHits())
  471. if searchByMatch.Hits != nil {
  472. for _, v := range searchByMatch.Hits.Hits {
  473. articleJson, err := v.Source.MarshalJSON()
  474. if err != nil {
  475. return nil, err
  476. }
  477. article := new(models.CygxArticle)
  478. err = json.Unmarshal(articleJson, &article)
  479. if err != nil {
  480. return nil, err
  481. }
  482. if _, ok := searchMap[article.ArticleId]; !ok {
  483. searchItem := new(models.SearchItem)
  484. searchItem.ArticleId, _ = strconv.Atoi(v.Id)
  485. searchItem.Body = v.Highlight["BodyText"]
  486. var title string
  487. if len(v.Highlight["Title"]) > 0 {
  488. title = v.Highlight["Title"][0]
  489. } else {
  490. title = article.Title
  491. }
  492. searchItem.Title = title
  493. searchItem.PublishDate = article.PublishDate
  494. result = append(result, searchItem)
  495. searchMap[article.ArticleId] = article.ArticleId
  496. }
  497. }
  498. }
  499. return
  500. }
  501. func AddMap() {
  502. errorlog := log.New(os.Stdout, "APP", log.LstdFlags)
  503. file := "./rdlucklog/eslog.log"
  504. logFile, _ := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766)
  505. client, err := elastic.NewClient(
  506. elastic.SetURL(ES_URL),
  507. elastic.SetBasicAuth(ES_USERNAME, ES_PASSWORD),
  508. elastic.SetTraceLog(log.New(logFile, "ES-TRACE: ", 0)),
  509. elastic.SetSniff(false), elastic.SetErrorLog(errorlog))
  510. if err != nil {
  511. fmt.Println("NewClient Err:", err.Error())
  512. }
  513. bodyJson := `{
  514. "mappings": {
  515. "properties": {
  516. "ArticleId": {
  517. "type": "integer"
  518. },
  519. "Title": {
  520. "type": "text",
  521. "analyzer": "ik_smart"
  522. },
  523. "BodyText": {
  524. "type": "text",
  525. "analyzer": "ik_smart"
  526. }
  527. }
  528. }
  529. }`
  530. //var esMappingIndex = "article_mapping"
  531. var esIndex = "article_two"
  532. a := client.IndexAnalyze().Index(esIndex)
  533. analyzeBody, err := json.Marshal(a)
  534. fmt.Println(string(analyzeBody))
  535. exists, err := client.IndexExists(esIndex).Do(context.Background()) //<5>
  536. if err != nil {
  537. fmt.Println("IndexExists Err:" + err.Error())
  538. return
  539. }
  540. fmt.Println("exists:", exists)
  541. if !exists {
  542. _, err = client.CreateIndex(esIndex).BodyJson(bodyJson).Do(context.Background())
  543. //BodyJson(bodyJson).Do(context.Background())
  544. if err != nil {
  545. fmt.Println("CreateIndex Err:" + err.Error())
  546. return
  547. }
  548. }
  549. item, err := models.GetArticleDetailTestById(3546)
  550. if err != nil {
  551. fmt.Println("GetArticleDetailById Err:" + err.Error())
  552. return
  553. }
  554. content := html.UnescapeString(item.Body)
  555. doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
  556. if err != nil {
  557. fmt.Println("create doc err:", err.Error())
  558. return
  559. }
  560. bodyText := doc.Text()
  561. item.BodyText = bodyText
  562. //新增
  563. resp, err := client.Index().Index(esIndex).Id(strconv.Itoa(item.ArticleId)).BodyJson(item).Do(context.Background())
  564. if err != nil {
  565. fmt.Println("insert es failed", err.Error())
  566. return
  567. }
  568. fmt.Println(resp)
  569. }