search_templates_test.go 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. // Copyright 2012-2015 Oliver Eilhard. All rights reserved.
  2. // Use of this source code is governed by a MIT-license.
  3. // See http://olivere.mit-license.org/license.txt for details.
  4. package elastic
  5. import (
  6. "testing"
  7. )
  8. func TestSearchTemplatesLifecycle(t *testing.T) {
  9. client := setupTestClientAndCreateIndex(t)
  10. // Template
  11. tmpl := `{"template":{"query":{"match":{"title":"{{query_string}}"}}}}`
  12. // Create template
  13. cresp, err := client.PutTemplate().Id("elastic-test").BodyString(tmpl).Do()
  14. if err != nil {
  15. t.Fatal(err)
  16. }
  17. if cresp == nil {
  18. t.Fatalf("expected response != nil; got: %v", cresp)
  19. }
  20. if !cresp.Created {
  21. t.Errorf("expected created = %v; got: %v", true, cresp.Created)
  22. }
  23. // Get template
  24. resp, err := client.GetTemplate().Id("elastic-test").Do()
  25. if err != nil {
  26. t.Fatal(err)
  27. }
  28. if resp == nil {
  29. t.Fatalf("expected response != nil; got: %v", resp)
  30. }
  31. if resp.Template == "" {
  32. t.Errorf("expected template != %q; got: %q", "", resp.Template)
  33. }
  34. // Delete template
  35. dresp, err := client.DeleteTemplate().Id("elastic-test").Do()
  36. if err != nil {
  37. t.Fatal(err)
  38. }
  39. if dresp == nil {
  40. t.Fatalf("expected response != nil; got: %v", dresp)
  41. }
  42. if !dresp.Found {
  43. t.Fatalf("expected found = %v; got: %v", true, dresp.Found)
  44. }
  45. }
  46. func TestSearchTemplatesInlineQuery(t *testing.T) {
  47. client := setupTestClientAndCreateIndex(t)
  48. tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."}
  49. tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."}
  50. tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."}
  51. // Add all documents
  52. _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do()
  53. if err != nil {
  54. t.Fatal(err)
  55. }
  56. _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do()
  57. if err != nil {
  58. t.Fatal(err)
  59. }
  60. _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do()
  61. if err != nil {
  62. t.Fatal(err)
  63. }
  64. _, err = client.Flush().Index(testIndexName).Do()
  65. if err != nil {
  66. t.Fatal(err)
  67. }
  68. // Run query with (inline) search template
  69. // See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-template-query.html
  70. tq := NewTemplateQuery(`{"match_{{template}}": {}}`).Var("template", "all")
  71. resp, err := client.Search(testIndexName).Query(&tq).Do()
  72. if err != nil {
  73. t.Fatal(err)
  74. }
  75. if resp == nil {
  76. t.Fatalf("expected response != nil; got: %v", resp)
  77. }
  78. if resp.Hits == nil {
  79. t.Fatalf("expected response hits != nil; got: %v", resp.Hits)
  80. }
  81. if resp.Hits.TotalHits != 3 {
  82. t.Fatalf("expected 3 hits; got: %d", resp.Hits.TotalHits)
  83. }
  84. }