es.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package main
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "github.com/olivere/elastic"
  7. log "github.com/sirupsen/logrus"
  8. "reflect"
  9. "strings"
  10. )
  11. var ESClient *elastic.Client
  12. var ESServerURL = []string{"http://127.0.0.1:9200"}
  13. type Language struct {
  14. Name string `json:"name"`
  15. BuildTime int `json:"build_time"`
  16. }
  17. func main() {
  18. var esIndex = "programming"
  19. var esType = "language"
  20. ESClient, err := elastic.NewClient(
  21. elastic.SetSniff(false),
  22. elastic.SetURL(ESServerURL...))
  23. if err != nil {
  24. log.Errorf("Failed to build elasticsearch connection: %s %s", strings.Join(ESServerURL, ","), err.Error())
  25. }
  26. info, code, err := ESClient.Ping(strings.Join(ESServerURL, ",")).Do(context.Background())
  27. if err != nil {
  28. log.Error("ping es failed", err.Error())
  29. }
  30. fmt.Printf("Elasticsearch returned with code %d and version %s\n", code, info.Version.Number)
  31. c := &Language{
  32. Name: "c",
  33. BuildTime: 1972,
  34. }
  35. php := &Language{
  36. Name: "php",
  37. BuildTime: 1995,
  38. }
  39. java := Language{
  40. Name: "java",
  41. BuildTime: 1995,
  42. }
  43. python := Language{
  44. Name: "python",
  45. BuildTime: 1991,
  46. }
  47. //index exits
  48. exists, err := ESClient.IndexExists(esIndex).Do(context.Background())
  49. if err != nil {
  50. log.Error("check index exist failed", err.Error())
  51. }
  52. if !exists {
  53. log.Infof("index %s is not exist", esIndex)
  54. _, err := ESClient.CreateIndex(esIndex).Do(context.Background())
  55. if err != nil {
  56. log.Error("create index failed", err.Error())
  57. }
  58. }
  59. //
  60. //insert
  61. _, err = ESClient.Index().Index(esIndex).Type(esType).Id(c.Name).BodyJson(c).Do(context.Background())
  62. if err != nil {
  63. log.Error("insert es failed", err.Error())
  64. }
  65. //
  66. bulkRequest := ESClient.Bulk().Index(esIndex).Type(esType)
  67. req := elastic.NewBulkIndexRequest().Doc(java)
  68. req.Id(java.Name)
  69. bulkRequest.Add(req)
  70. req = elastic.NewBulkIndexRequest().Doc(php)
  71. req.Id(php.Name)
  72. bulkRequest.Add(req)
  73. req = elastic.NewBulkIndexRequest().Doc(python)
  74. req.Id(python.Name)
  75. bulkRequest.Add(req)
  76. _, err = bulkRequest.Do(context.TODO())
  77. if err != nil {
  78. log.Error(err.Error())
  79. }
  80. //update
  81. c.BuildTime = 2020
  82. _,err = ESClient.Update().Index(esIndex).Type(esType).Id("c").Doc(c).DetectNoop(false).Do(context.Background())
  83. if err != nil {
  84. log.Error(err.Error())
  85. }
  86. //query
  87. var resultType Language
  88. searchById,err := ESClient.Get().Index(esIndex).Type(esType).Id("java").Do(context.Background())
  89. if searchById.Found{
  90. if err := json.Unmarshal(searchById.Source,&resultType); err != nil{
  91. log.Error(err.Error())
  92. }
  93. fmt.Printf("search by id: %#v \n",resultType)
  94. }
  95. searchAll,err := ESClient.Search(esIndex).Type(esType).Do(context.Background())
  96. for _,item := range searchAll.Each(reflect.TypeOf(resultType)) {
  97. language := item.(Language)
  98. fmt.Printf("search by index all: %#v \n",language)
  99. }
  100. searchPart,err := ESClient.Search(esIndex).Type(esType).Size(2).Do(context.Background())
  101. for _,item := range searchPart.Each(reflect.TypeOf(resultType)) {
  102. language := item.(Language)
  103. fmt.Printf("search by index part: %#v \n",language)
  104. }
  105. boolquery := elastic.NewBoolQuery()
  106. boolquery.Must(elastic.NewMatchQuery("name","java"))
  107. searchByMatch,err := ESClient.Search(esIndex).Type(esType).Query(boolquery).Do(context.Background())
  108. for _,item := range searchByMatch.Each(reflect.TypeOf(resultType)) {
  109. language := item.(Language)
  110. fmt.Printf("search by match: %#v \n",language)
  111. }
  112. matchPhraseQuery := elastic.NewMatchPhraseQuery("name","py")
  113. searchByPhrase,err := ESClient.Search(esIndex).Type(esType).Query(matchPhraseQuery).Do(context.Background())
  114. for _,item := range searchByPhrase.Each(reflect.TypeOf(resultType)) {
  115. language := item.(Language)
  116. fmt.Printf("search by phrase: %#v \n",language)
  117. }
  118. boolquery2 := elastic.NewBoolQuery()
  119. boolquery2.Filter(elastic.NewRangeQuery("build_time").Gt(2000))
  120. searchByfilter,err := ESClient.Search(esIndex).Type(esType).Query(boolquery2).Do(context.Background())
  121. for _,item := range searchByfilter.Each(reflect.TypeOf(resultType)) {
  122. language := item.(Language)
  123. fmt.Printf("search by filter: %#v \n",language)
  124. }
  125. //delete
  126. _,err = ESClient.Delete().Index(esIndex).Type(esType).Id("c").Do(context.Background())
  127. if err != nil {
  128. log.Error(err.Error())
  129. }
  130. _, err = ESClient.DeleteIndex(esIndex).Do(context.Background())
  131. if err != nil {
  132. log.Error(err.Error())
  133. }
  134. }