elastic-enterprise-search 0.3.1 → 7.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. checksums.yaml +4 -4
  2. data/.ci/.gitignore +1 -0
  3. data/.ci/Dockerfile +12 -0
  4. data/.ci/certs/README.md +50 -0
  5. data/.ci/certs/ca.crt +20 -0
  6. data/.ci/certs/ca.key +27 -0
  7. data/.ci/certs/testnode.crt +21 -0
  8. data/.ci/certs/testnode.key +27 -0
  9. data/.ci/certs/testnode_no_san.crt +19 -0
  10. data/.ci/certs/testnode_no_san.key +27 -0
  11. data/.ci/functions/cleanup.sh +67 -0
  12. data/.ci/functions/imports.sh +59 -0
  13. data/.ci/functions/wait-for-container.sh +36 -0
  14. data/.ci/jobs/defaults.yml +69 -0
  15. data/.ci/jobs/elastic+enterprise-search-ruby+7.11.yml +12 -0
  16. data/.ci/jobs/elastic+enterprise-search-ruby+master.yml +12 -0
  17. data/.ci/jobs/elastic+enterprise-search-ruby+pull-request.yml +19 -0
  18. data/.ci/run-elasticsearch.sh +127 -0
  19. data/.ci/run-enterprise-search.sh +71 -0
  20. data/.ci/run-local.sh +14 -0
  21. data/.ci/run-repository.sh +49 -0
  22. data/.ci/run-tests +27 -0
  23. data/.ci/test-matrix.yml +14 -0
  24. data/.github/workflows/rubocop.yml +15 -0
  25. data/.github/workflows/testing.yml +40 -0
  26. data/.gitignore +4 -0
  27. data/.rubocop.yml +52 -0
  28. data/CONTRIBUTING.md +43 -0
  29. data/Gemfile +23 -1
  30. data/{LICENSE.txt → LICENSE} +33 -32
  31. data/README.md +27 -147
  32. data/Rakefile +48 -1
  33. data/docs/guide/app-search-api.asciidoc +186 -0
  34. data/docs/guide/connecting.asciidoc +125 -0
  35. data/docs/guide/development.asciidoc +42 -0
  36. data/docs/guide/enterprise-search-api.asciidoc +46 -0
  37. data/docs/guide/index.asciidoc +19 -0
  38. data/docs/guide/installation.asciidoc +18 -0
  39. data/docs/guide/overview.asciidoc +59 -0
  40. data/docs/guide/release_notes/710.asciidoc +4 -0
  41. data/docs/guide/release_notes/711.asciidoc +27 -0
  42. data/docs/guide/release_notes/712.asciidoc +38 -0
  43. data/docs/guide/release_notes/index.asciidoc +14 -0
  44. data/docs/guide/workplace-search-api.asciidoc +121 -0
  45. data/elastic-enterprise-search.gemspec +49 -13
  46. data/lib/elastic-enterprise-search.rb +20 -1
  47. data/lib/elastic/.rubocop.yml +6 -0
  48. data/lib/elastic/app-search/api/add_meta_engine_source.rb +51 -0
  49. data/lib/elastic/app-search/api/api_logs.rb +62 -0
  50. data/lib/elastic/app-search/api/count_analytics.rb +52 -0
  51. data/lib/elastic/app-search/api/create_curation.rb +54 -0
  52. data/lib/elastic/app-search/api/create_engine.rb +53 -0
  53. data/lib/elastic/app-search/api/create_synonym_set.rb +51 -0
  54. data/lib/elastic/app-search/api/curation.rb +53 -0
  55. data/lib/elastic/app-search/api/delete_curation.rb +53 -0
  56. data/lib/elastic/app-search/api/delete_documents.rb +51 -0
  57. data/lib/elastic/app-search/api/delete_engine.rb +50 -0
  58. data/lib/elastic/app-search/api/delete_meta_engine_source.rb +51 -0
  59. data/lib/elastic/app-search/api/delete_synonym_set.rb +53 -0
  60. data/lib/elastic/app-search/api/documents.rb +51 -0
  61. data/lib/elastic/app-search/api/engine.rb +50 -0
  62. data/lib/elastic/app-search/api/index_documents.rb +51 -0
  63. data/lib/elastic/app-search/api/list_curations.rb +52 -0
  64. data/lib/elastic/app-search/api/list_documents.rb +52 -0
  65. data/lib/elastic/app-search/api/list_engines.rb +49 -0
  66. data/lib/elastic/app-search/api/list_synonym_sets.rb +52 -0
  67. data/lib/elastic/app-search/api/log_clickthrough.rb +57 -0
  68. data/lib/elastic/app-search/api/multi_search.rb +51 -0
  69. data/lib/elastic/app-search/api/put_curation.rb +57 -0
  70. data/lib/elastic/app-search/api/put_documents.rb +51 -0
  71. data/lib/elastic/app-search/api/put_schema.rb +51 -0
  72. data/lib/elastic/app-search/api/put_search_settings.rb +51 -0
  73. data/lib/elastic/app-search/api/put_synonym_set.rb +54 -0
  74. data/lib/elastic/app-search/api/query_suggestion.rb +54 -0
  75. data/lib/elastic/app-search/api/reset_search_settings.rb +50 -0
  76. data/lib/elastic/app-search/api/schema.rb +50 -0
  77. data/lib/elastic/app-search/api/search.rb +50 -0
  78. data/lib/elastic/app-search/api/search_settings.rb +50 -0
  79. data/lib/elastic/app-search/api/synonym_set.rb +53 -0
  80. data/lib/elastic/app-search/api/top_clicks_analytics.rb +54 -0
  81. data/lib/elastic/app-search/api/top_queries_analytics.rb +53 -0
  82. data/lib/elastic/app-search/app_search.rb +82 -0
  83. data/lib/elastic/enterprise-search/api/health.rb +43 -0
  84. data/lib/elastic/enterprise-search/api/put_read_only.rb +44 -0
  85. data/lib/elastic/enterprise-search/api/read_only.rb +43 -0
  86. data/lib/elastic/enterprise-search/api/stats.rb +45 -0
  87. data/lib/elastic/enterprise-search/api/version.rb +43 -0
  88. data/lib/elastic/enterprise-search/client.rb +93 -15
  89. data/lib/elastic/enterprise-search/configuration.rb +32 -16
  90. data/lib/elastic/enterprise-search/exceptions.rb +19 -0
  91. data/lib/elastic/enterprise-search/request.rb +59 -81
  92. data/lib/elastic/enterprise-search/utils.rb +28 -1
  93. data/lib/elastic/enterprise-search/version.rb +20 -1
  94. data/lib/elastic/enterprise_search.rb +38 -0
  95. data/lib/elastic/workplace-search/api/add_user_permissions.rb +54 -0
  96. data/lib/elastic/workplace-search/api/create_analytics_event.rb +59 -0
  97. data/lib/elastic/workplace-search/api/create_external_identity.rb +51 -0
  98. data/lib/elastic/workplace-search/api/delete_documents.rb +51 -0
  99. data/lib/elastic/workplace-search/api/delete_external_identity.rb +53 -0
  100. data/lib/elastic/workplace-search/api/external_identity.rb +53 -0
  101. data/lib/elastic/workplace-search/api/index_documents.rb +52 -0
  102. data/lib/elastic/workplace-search/api/list_external_identities.rb +51 -0
  103. data/lib/elastic/workplace-search/api/list_permissions.rb +51 -0
  104. data/lib/elastic/workplace-search/api/put_external_identity.rb +54 -0
  105. data/lib/elastic/workplace-search/api/put_user_permissions.rb +54 -0
  106. data/lib/elastic/workplace-search/api/remove_user_permissions.rb +54 -0
  107. data/lib/elastic/workplace-search/api/search.rb +60 -0
  108. data/lib/elastic/workplace-search/api/user_permissions.rb +53 -0
  109. data/lib/elastic/workplace-search/workplace_search.rb +84 -0
  110. data/spec/app-search/api_count_analytics_spec.rb +34 -0
  111. data/spec/app-search/api_curations_spec.rb +97 -0
  112. data/spec/app-search/api_documents_spec.rb +102 -0
  113. data/spec/app-search/api_engines_spec.rb +67 -0
  114. data/spec/app-search/api_log_clickthrough_spec.rb +34 -0
  115. data/spec/app-search/api_logs_spec.rb +36 -0
  116. data/spec/app-search/api_meta_engines_spec.rb +72 -0
  117. data/spec/app-search/api_query_suggestion_spec.rb +39 -0
  118. data/spec/app-search/api_schema_spec.rb +48 -0
  119. data/spec/app-search/api_search_and_multi_search_spec.rb +48 -0
  120. data/spec/app-search/api_search_settings_spec.rb +76 -0
  121. data/spec/app-search/api_spec_helper.rb +14 -0
  122. data/spec/app-search/api_synonyms_spec.rb +79 -0
  123. data/spec/app-search/api_top_clicks_analytics_spec.rb +44 -0
  124. data/spec/app-search/api_top_queries_analytics_spec.rb +34 -0
  125. data/spec/app-search/client_spec.rb +88 -0
  126. data/spec/app-search/date_spec.rb +69 -0
  127. data/spec/enterprise-search/client_spec.rb +107 -0
  128. data/spec/enterprise-search/request_spec.rb +136 -0
  129. data/spec/enterprise-search/utils_spec.rb +46 -0
  130. data/spec/fixtures/vcr/app_search/add_meta_engine_source.yml +109 -0
  131. data/spec/fixtures/vcr/app_search/api_documents.yml +56 -0
  132. data/spec/fixtures/vcr/app_search/api_index_documents.yml +57 -0
  133. data/spec/fixtures/vcr/app_search/api_log_clickthrough.yml +54 -0
  134. data/spec/fixtures/vcr/app_search/api_logs.yml +70 -0
  135. data/spec/fixtures/vcr/app_search/api_put_schema.yml +109 -0
  136. data/spec/fixtures/vcr/app_search/api_put_search_settings.yml +56 -0
  137. data/spec/fixtures/vcr/app_search/api_query_suggestion.yml +59 -0
  138. data/spec/fixtures/vcr/app_search/api_reset_search_settings.yml +56 -0
  139. data/spec/fixtures/vcr/app_search/api_schema.yml +56 -0
  140. data/spec/fixtures/vcr/app_search/api_search_settings.yml +56 -0
  141. data/spec/fixtures/vcr/app_search/api_top_clicks_analytics.yml +55 -0
  142. data/spec/fixtures/vcr/app_search/api_top_clicks_analytics_query.yml +55 -0
  143. data/spec/fixtures/vcr/app_search/api_top_queries_analytics.yml +55 -0
  144. data/spec/fixtures/vcr/app_search/count_analytics.yml +55 -0
  145. data/spec/fixtures/vcr/app_search/create_and_update_document.yml +107 -0
  146. data/spec/fixtures/vcr/app_search/create_curation.yml +113 -0
  147. data/spec/fixtures/vcr/app_search/create_engine.yml +55 -0
  148. data/spec/fixtures/vcr/app_search/create_meta_engine.yml +56 -0
  149. data/spec/fixtures/vcr/app_search/create_synonym_set.yml +56 -0
  150. data/spec/fixtures/vcr/app_search/delete_curation.yml +56 -0
  151. data/spec/fixtures/vcr/app_search/delete_engine.yml +55 -0
  152. data/spec/fixtures/vcr/app_search/delete_meta_engine_source.yml +56 -0
  153. data/spec/fixtures/vcr/app_search/delete_synonym_set.yml +56 -0
  154. data/spec/fixtures/vcr/app_search/get_curation.yml +56 -0
  155. data/spec/fixtures/vcr/app_search/get_engine.yml +55 -0
  156. data/spec/fixtures/vcr/app_search/index_and_delete_document.yml +107 -0
  157. data/spec/fixtures/vcr/app_search/list_curations.yml +56 -0
  158. data/spec/fixtures/vcr/app_search/list_documents.yml +57 -0
  159. data/spec/fixtures/vcr/app_search/list_engines.yml +55 -0
  160. data/spec/fixtures/vcr/app_search/list_synonym_sets.yml +56 -0
  161. data/spec/fixtures/vcr/app_search/multi_query_search.yml +63 -0
  162. data/spec/fixtures/vcr/app_search/put_curation.yml +113 -0
  163. data/spec/fixtures/vcr/app_search/put_synonym_set.yml +56 -0
  164. data/spec/fixtures/vcr/app_search/search.yml +57 -0
  165. data/spec/fixtures/vcr/app_search/single_query_search.yml +60 -0
  166. data/spec/fixtures/vcr/app_search/synonym_set.yml +56 -0
  167. data/spec/fixtures/vcr/workplace_search/add_user_permissions.yml +53 -0
  168. data/spec/fixtures/vcr/workplace_search/clear_user_permissions.yml +53 -0
  169. data/spec/fixtures/vcr/workplace_search/create_analytics_event.yml +55 -0
  170. data/spec/fixtures/vcr/workplace_search/create_external_identity.yml +53 -0
  171. data/spec/fixtures/vcr/workplace_search/delete_documents.yml +53 -0
  172. data/spec/fixtures/vcr/workplace_search/delete_external_identity.yml +53 -0
  173. data/spec/fixtures/vcr/workplace_search/index_documents.yml +55 -0
  174. data/spec/fixtures/vcr/workplace_search/list_external_identities.yml +53 -0
  175. data/spec/fixtures/vcr/workplace_search/list_permissions.yml +53 -0
  176. data/spec/fixtures/vcr/workplace_search/oauth_request_token.yml +57 -0
  177. data/spec/fixtures/vcr/workplace_search/put_external_identity.yml +53 -0
  178. data/spec/fixtures/vcr/workplace_search/put_user_permissions.yml +103 -0
  179. data/spec/fixtures/vcr/workplace_search/remove_user_permissions.yml +53 -0
  180. data/spec/fixtures/vcr/workplace_search/retrieve_external_identity.yml +53 -0
  181. data/spec/fixtures/vcr/workplace_search/search_request.yml +60 -0
  182. data/spec/fixtures/vcr/workplace_search/user_permissions_empty.yml +53 -0
  183. data/spec/integration/enterprise_search_api_spec.rb +96 -0
  184. data/spec/spec_helper.rb +27 -14
  185. data/spec/webmock_requires.rb +4 -0
  186. data/spec/workplace-search/client_spec.rb +77 -0
  187. data/spec/workplace-search/create_analytics_event_spec.rb +59 -0
  188. data/spec/workplace-search/documents_spec.rb +80 -0
  189. data/spec/workplace-search/external_identities_spec.rb +84 -0
  190. data/spec/workplace-search/permissions_spec.rb +136 -0
  191. data/spec/workplace-search/search_spec.rb +53 -0
  192. metadata +279 -47
  193. data/.circleci/config.yml +0 -68
  194. data/.travis.yml +0 -15
  195. data/NOTICE.txt +0 -3
  196. data/lib/elastic/enterprise-search.rb +0 -7
  197. data/lib/elastic/enterprise-search/client/content_source_documents.rb +0 -46
  198. data/lib/elastic/enterprise-search/client/permissions.rb +0 -30
  199. data/logo-enterprise-search.png +0 -0
  200. data/spec/client/content_source_documents_spec.rb +0 -55
  201. data/spec/client/permissions_spec.rb +0 -75
  202. data/spec/configuration_spec.rb +0 -19
  203. data/spec/fixtures/vcr/add_user_permissions.yml +0 -55
  204. data/spec/fixtures/vcr/async_create_or_update_document_success.yml +0 -51
  205. data/spec/fixtures/vcr/destroy_documents_success.yml +0 -51
  206. data/spec/fixtures/vcr/get_user_permissions.yml +0 -55
  207. data/spec/fixtures/vcr/list_all_permissions.yml +0 -55
  208. data/spec/fixtures/vcr/list_all_permissions_with_paging.yml +0 -55
  209. data/spec/fixtures/vcr/remove_user_permissions.yml +0 -55
  210. data/spec/fixtures/vcr/update_user_permissions.yml +0 -55
@@ -0,0 +1,34 @@
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ # frozen_string_literal: true
19
+
20
+ require 'spec_helper'
21
+ require_relative './api_spec_helper'
22
+
23
+ describe Elastic::EnterpriseSearch::AppSearch::Client do
24
+ context 'api_logs' do
25
+ it 'returns api logs' do
26
+ VCR.use_cassette('app_search/count_analytics') do
27
+ response = @client.count_analytics('videogames')
28
+
29
+ expect(response.status).to eq 200
30
+ expect(response.body['results'].count).to be > 1
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,97 @@
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ # frozen_string_literal: true
19
+
20
+ require_relative './api_spec_helper'
21
+
22
+ describe Elastic::EnterpriseSearch::AppSearch::Client do
23
+ context 'curations' do
24
+ let(:engine_name) { 'books' }
25
+
26
+ it 'creates a new curation' do
27
+ VCR.use_cassette('app_search/create_curation') do
28
+ response = @client.create_curation(
29
+ engine_name,
30
+ queries: ['jungle'],
31
+ promoted: ['doc-600070f60e9e05e6b7037721'],
32
+ hidden: ['doc-600070f60e9e05e6b7037729']
33
+ )
34
+ expect(response.status).to eq 200
35
+ expect(response.body['id']).to match(/cur-[0-9a-f]+/)
36
+
37
+ response = @client.search(engine_name, query: 'jungle')
38
+ expect(response.status).to eq 200
39
+ expect(response.body['results'].count).to eq 1
40
+ expect(response.body['results'].first['title']['raw']).to eq 'Jungle Tales'
41
+ end
42
+ end
43
+
44
+ it 'retrieves a curation by id' do
45
+ VCR.use_cassette('app_search/get_curation') do
46
+ response = @client.curation(engine_name, curation_id: 'cur-600202fa0e9e05e6b7037753')
47
+
48
+ expect(response.status).to eq 200
49
+ expect(response.body['id']).to match(/cur-[0-9a-f]+/)
50
+ expect(response.body['queries']).to eq ['jungle']
51
+ expect(response.body['promoted']).to eq ['doc-600070f60e9e05e6b7037721']
52
+ expect(response.body['hidden']).to eq ['doc-600070f60e9e05e6b7037729']
53
+ end
54
+ end
55
+
56
+ it 'updates an existing curation' do
57
+ VCR.use_cassette('app_search/put_curation') do
58
+ response = @client.put_curation(
59
+ engine_name,
60
+ curation_id: 'cur-600202fa0e9e05e6b7037753',
61
+ queries: ['jungle'],
62
+ promoted: ['doc-600070f60e9e05e6b7037729'],
63
+ hidden: ['doc-600070f60e9e05e6b7037721']
64
+ )
65
+
66
+ expect(response.status).to eq 200
67
+ expect(response.body['id']).to match(/cur-[0-9a-f]+/)
68
+
69
+ response = @client.search(engine_name, query: 'jungle')
70
+ expect(response.status).to eq 200
71
+ expect(response.body['results'].count).to eq 1
72
+ expect(response.body['results'].first['title']['raw']).to eq 'The Jungle Book'
73
+ end
74
+ end
75
+
76
+ it 'lists curations' do
77
+ VCR.use_cassette('app_search/list_curations') do
78
+ response = @client.list_curations(engine_name)
79
+
80
+ expect(response.status).to eq 200
81
+ expect(response.body['results'].count).to eq 1
82
+ curation = response.body['results'].first
83
+ expect(curation['id']).to match(/cur-[0-9a-f]+/)
84
+ expect(curation['queries']).to eq ['jungle']
85
+ end
86
+ end
87
+
88
+ it 'deletes a curation' do
89
+ VCR.use_cassette('app_search/delete_curation') do
90
+ response = @client.delete_curation(engine_name, curation_id: 'cur-6002097c0e9e053992037769')
91
+
92
+ expect(response.status).to eq 200
93
+ expect(response.body).to eq({ 'deleted' => true })
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,102 @@
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ # frozen_string_literal: true
19
+
20
+ require_relative './api_spec_helper'
21
+
22
+ describe Elastic::EnterpriseSearch::AppSearch::Client do
23
+ let(:engine_name) { 'videogames' }
24
+
25
+ # TODO: Once we stop using VCR, we need to do create / list / destroy engines
26
+
27
+ context 'documents' do
28
+ it 'indexes and lists documents' do
29
+ VCR.use_cassette('app_search/api_index_documents') do
30
+ documents = [
31
+ { name: 'Super Lorenzo Bros', year: 1985 },
32
+ { name: 'Pack-Man', year: 1980 },
33
+ { name: 'Galaxxian', year: 1979 },
34
+ { name: 'Audiovisual, the hedgehog', year: '1991' }
35
+ ]
36
+ response = @client.index_documents(engine_name, documents: documents)
37
+ expect(response.status).to eq 200
38
+ expect(response.body.count).to eq 4
39
+ expect(response.body.map(&:keys)).to eq [['id', 'errors'], ['id', 'errors'], ['id', 'errors'], ['id', 'errors']]
40
+ end
41
+
42
+ VCR.use_cassette('app_search/list_documents') do
43
+ response = @client.list_documents(engine_name)
44
+
45
+ expect(response.status).to eq 200
46
+ expect(response.body['results'].count).to eq 4
47
+ end
48
+ end
49
+
50
+ it 'retrieves documents by ID' do
51
+ VCR.use_cassette('app_search/api_documents') do
52
+ ids = ['doc-6005c044ad7f0c8b464b8cc4', 'doc-6005c044ad7f0c8b464b8cc3']
53
+ response = @client.documents(engine_name, document_ids: ids)
54
+
55
+ expect(response.status).to eq 200
56
+ expect(response.body.count).to eq 2
57
+ expect(response.body).to include(
58
+ { 'name' => 'Galaxxian', 'year' => '1979', 'id' => 'doc-6005c044ad7f0c8b464b8cc4' },
59
+ { 'name' => 'Pack-Man', 'year' => '1980', 'id' => 'doc-6005c044ad7f0c8b464b8cc3' }
60
+ )
61
+ end
62
+ end
63
+
64
+ it 'searches for a document' do
65
+ VCR.use_cassette('app_search/search') do
66
+ response = @client.search(engine_name, body: { query: 'Pack-Man' })
67
+ expect(response.status).to eq 200
68
+ expect(response.body['meta']['engine']).to eq({ 'name' => 'videogames', 'type' => 'default' })
69
+ expect(response.body['results'].first['name']).to eq({ 'raw' => 'Pack-Man' })
70
+ expect(response.body['results'].first['year']).to eq({ 'raw' => '1980' })
71
+ end
72
+ end
73
+
74
+ it 'deletes a document' do
75
+ VCR.use_cassette('app_search/index_and_delete_document') do
76
+ document = { name: 'Princess Zelda', year: 1986 }
77
+ response = @client.index_documents(engine_name, documents: document)
78
+ expect(response.status).to eq 200
79
+
80
+ id = response.body.first['id']
81
+
82
+ response = @client.delete_documents(engine_name, document_ids: [id])
83
+ expect(response.status).to eq 200
84
+ expect(response.body.first['deleted'])
85
+ end
86
+ end
87
+
88
+ it 'updates a document' do
89
+ VCR.use_cassette('app_search/create_and_update_document') do
90
+ document = { name: '', year: 1986 }
91
+ response = @client.index_documents(engine_name, documents: document)
92
+ expect(response.status).to eq 200
93
+
94
+ id = response.body.first['id']
95
+
96
+ response = @client.put_documents(engine_name, documents: [{ id: id, year: 1987 }])
97
+ expect(response.status).to eq 200
98
+ expect(response.body).to eq [{ 'id' => 'doc-5fa2d4e1389ab975965be3e3', 'errors' => [] }]
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,67 @@
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ # frozen_string_literal: true
19
+
20
+ require_relative './api_spec_helper'
21
+
22
+ describe Elastic::EnterpriseSearch::AppSearch::Client do
23
+ let(:engine_name) { 'videogames' }
24
+
25
+ # TODO: Once we stop using VCR, we need to do create / list / destroy engines
26
+
27
+ context 'engines' do
28
+ it 'creates an engine' do
29
+ VCR.use_cassette('app_search/create_engine') do
30
+ response = @client.create_engine(name: 'videogames')
31
+
32
+ expect(response.status).to eq 200
33
+ expect(response.body).to eq({ 'name' => 'videogames', 'type' => 'default', 'language' => nil })
34
+ end
35
+ end
36
+
37
+ it 'lists engines' do
38
+ VCR.use_cassette('app_search/list_engines') do
39
+ response = @client.list_engines
40
+
41
+ expect(response.status).to eq 200
42
+ expect(response.body).to eq(
43
+ { 'meta' => { 'page' => { 'current' => 1, 'total_pages' => 1, 'total_results' => 1, 'size' => 25 } },
44
+ 'results' => [{ 'name' => 'videogames', 'type' => 'default', 'language' => nil }] }
45
+ )
46
+ end
47
+ end
48
+
49
+ it 'retrieves an engine by name' do
50
+ VCR.use_cassette('app_search/get_engine') do
51
+ response = @client.engine('videogames')
52
+
53
+ expect(response.status).to eq 200
54
+ expect(response.body).to eq({ 'name' => 'videogames', 'type' => 'default', 'language' => nil })
55
+ end
56
+ end
57
+
58
+ it 'deletes an engine' do
59
+ VCR.use_cassette('app_search/delete_engine') do
60
+ response = @client.delete_engine('videogames')
61
+
62
+ expect(response.status).to eq 200
63
+ expect(response.body).to eq({ 'deleted' => true })
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,34 @@
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ # frozen_string_literal: true
19
+
20
+ require_relative './api_spec_helper'
21
+
22
+ describe Elastic::EnterpriseSearch::AppSearch::Client do
23
+ context 'api_log_clickthrough' do
24
+ let(:engine_name) { 'films' }
25
+
26
+ it 'logs clicked results' do
27
+ VCR.use_cassette('app_search/api_log_clickthrough') do
28
+ response = @client.log_clickthrough(engine_name, query_text: 'moon', document_id: 'doc-id')
29
+
30
+ expect(response.status).to eq 200
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,36 @@
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ # frozen_string_literal: true
19
+
20
+ require_relative './api_spec_helper'
21
+
22
+ describe Elastic::EnterpriseSearch::AppSearch::Client do
23
+ context 'api_logs' do
24
+ it 'returns api logs' do
25
+ VCR.use_cassette('app_search/api_logs') do
26
+ response = @client.api_logs(
27
+ 'videogames',
28
+ from_date: Date.new(2020, 10, 0o1),
29
+ to_date: Date.new(2020, 11, 0o5)
30
+ )
31
+ expect(response.status).to eq 200
32
+ expect(response.body['results'].count).to be > 1
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,72 @@
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ # frozen_string_literal: true
19
+
20
+ require_relative './api_spec_helper'
21
+
22
+ describe Elastic::EnterpriseSearch::AppSearch::Client do
23
+ let(:engine_name) { 'new-meta-engine' }
24
+
25
+ # TODO: Once we stop using VCR, we need to do create / list / destroy engines
26
+
27
+ context 'meta engines' do
28
+ it 'creates a meta engine' do
29
+ VCR.use_cassette('app_search/create_meta_engine') do
30
+ body = {
31
+ name: engine_name,
32
+ type: 'meta',
33
+ source_engines: ['books', 'videogames']
34
+ }
35
+ response = @client.create_engine(name: engine_name, body: body)
36
+
37
+ expect(response.status).to eq 200
38
+ expect(response.body['name']).to eq('new-meta-engine')
39
+ expect(response.body['type']).to eq('meta')
40
+ expect(response.body['source_engines'].sort).to eq(['books', 'videogames'])
41
+ expect(response.body['document_count']).to be > 1
42
+ end
43
+ end
44
+
45
+ it 'adds a new source engine to a meta engine' do
46
+ VCR.use_cassette('app_search/add_meta_engine_source') do
47
+ # Create new source engine to add:
48
+ @client.create_engine(name: 'comicbooks')
49
+
50
+ response = @client.add_meta_engine_source(engine_name, source_engines: ['comicbooks'])
51
+
52
+ expect(response.status).to eq 200
53
+ expect(response.body['name']).to eq('new-meta-engine')
54
+ expect(response.body['type']).to eq('meta')
55
+ expect(response.body['source_engines'].sort).to eq(['books', 'comicbooks', 'videogames'])
56
+ expect(response.body['document_count']).to be > 1
57
+ end
58
+ end
59
+
60
+ it 'removes a source engine from a meta engine' do
61
+ VCR.use_cassette('app_search/delete_meta_engine_source') do
62
+ response = @client.delete_meta_engine_source(engine_name, source_engines: ['videogames'])
63
+
64
+ expect(response.status).to eq 200
65
+ expect(response.body['name']).to eq('new-meta-engine')
66
+ expect(response.body['type']).to eq('meta')
67
+ expect(response.body['source_engines'].sort).to eq(['books', 'comicbooks'])
68
+ expect(response.body['document_count']).to be > 1
69
+ end
70
+ end
71
+ end
72
+ end