elastic-enterprise-search 7.17.0 → 8.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/.ci/jobs/elastic+enterprise-search-ruby+7.15.yml +12 -0
  3. data/.ci/jobs/elastic+enterprise-search-ruby+7.16.yml +12 -0
  4. data/.ci/test-matrix.yml +1 -2
  5. data/.github/workflows/testing.yml +3 -4
  6. data/.rubocop.yml +1 -1
  7. data/CHANGELOG +1 -0
  8. data/CODE_OF_CONDUCT +1 -0
  9. data/CONTRIBUTING.md +37 -0
  10. data/NOTICE +2 -0
  11. data/README.md +25 -29
  12. data/docs/guide/app-search-api.asciidoc +52 -18
  13. data/docs/guide/overview.asciidoc +11 -3
  14. data/docs/guide/release_notes/712.asciidoc +10 -0
  15. data/docs/guide/release_notes/80.asciidoc +117 -0
  16. data/docs/guide/release_notes/81.asciidoc +8 -0
  17. data/docs/guide/release_notes/index.asciidoc +6 -0
  18. data/docs/guide/workplace-search-api.asciidoc +14 -7
  19. data/elastic-enterprise-search.gemspec +3 -3
  20. data/lib/elastic/api/response.rb +52 -0
  21. data/lib/elastic/{workplace-search/api/user_permissions.rb → app-search/api/adaptive_relevance_settings.rb} +10 -15
  22. data/lib/elastic/{workplace-search/api/add_user_permissions.rb → app-search/api/adaptive_relevance_suggestions.rb} +19 -14
  23. data/lib/elastic/app-search/api/add_meta_engine_source.rb +3 -5
  24. data/lib/elastic/app-search/api/api_key.rb +3 -6
  25. data/lib/elastic/app-search/api/api_logs.rb +7 -15
  26. data/lib/elastic/app-search/api/count_analytics.rb +4 -5
  27. data/lib/elastic/app-search/api/crawler_active_crawl_request.rb +4 -7
  28. data/lib/elastic/app-search/api/crawler_crawl_request.rb +5 -8
  29. data/lib/elastic/app-search/api/crawler_crawl_schedule.rb +4 -7
  30. data/lib/elastic/app-search/api/crawler_domain.rb +5 -8
  31. data/lib/elastic/app-search/api/crawler_domain_validation_result.rb +5 -5
  32. data/lib/elastic/app-search/api/crawler_metrics.rb +3 -6
  33. data/lib/elastic/app-search/api/crawler_overview.rb +4 -7
  34. data/lib/elastic/app-search/api/crawler_process_crawl.rb +5 -8
  35. data/lib/elastic/app-search/api/crawler_process_crawl_denied_urls.rb +5 -8
  36. data/lib/elastic/app-search/api/crawler_url_extraction_result.rb +6 -7
  37. data/lib/elastic/app-search/api/crawler_url_tracing_result.rb +6 -7
  38. data/lib/elastic/app-search/api/crawler_url_validation_result.rb +6 -7
  39. data/lib/elastic/app-search/api/crawler_user_agent.rb +3 -6
  40. data/lib/elastic/app-search/api/create_api_key.rb +9 -10
  41. data/lib/elastic/app-search/api/create_crawler_crawl_request.rb +9 -5
  42. data/lib/elastic/app-search/api/create_crawler_crawl_rule.rb +12 -11
  43. data/lib/elastic/app-search/api/create_crawler_domain.rb +7 -8
  44. data/lib/elastic/app-search/api/create_crawler_entry_point.rb +9 -8
  45. data/lib/elastic/app-search/api/create_crawler_process_crawl.rb +5 -6
  46. data/lib/elastic/app-search/api/create_crawler_sitemap.rb +9 -8
  47. data/lib/elastic/app-search/api/create_curation.rb +9 -8
  48. data/lib/elastic/app-search/api/create_engine.rb +7 -7
  49. data/lib/elastic/app-search/api/create_synonym_set.rb +5 -6
  50. data/lib/elastic/app-search/api/curation.rb +4 -7
  51. data/lib/elastic/app-search/api/delete_api_key.rb +3 -6
  52. data/lib/elastic/app-search/api/delete_crawler_active_crawl_request.rb +4 -7
  53. data/lib/elastic/app-search/api/delete_crawler_crawl_rule.rb +6 -9
  54. data/lib/elastic/app-search/api/delete_crawler_crawl_schedule.rb +4 -7
  55. data/lib/elastic/app-search/api/delete_crawler_domain.rb +5 -8
  56. data/lib/elastic/app-search/api/delete_crawler_entry_point.rb +6 -9
  57. data/lib/elastic/app-search/api/delete_crawler_sitemap.rb +6 -9
  58. data/lib/elastic/app-search/api/delete_curation.rb +4 -7
  59. data/lib/elastic/app-search/api/delete_documents.rb +3 -5
  60. data/lib/elastic/app-search/api/delete_engine.rb +3 -6
  61. data/lib/elastic/app-search/api/delete_meta_engine_source.rb +3 -4
  62. data/lib/elastic/app-search/api/delete_synonym_set.rb +4 -7
  63. data/lib/elastic/app-search/api/documents.rb +4 -5
  64. data/lib/elastic/app-search/api/engine.rb +3 -6
  65. data/lib/elastic/app-search/api/index_documents.rb +3 -5
  66. data/lib/elastic/{workplace-search/api/remove_user_permissions.rb → app-search/api/list_adaptive_relevance_suggestions.rb} +12 -14
  67. data/lib/elastic/app-search/api/list_api_keys.rb +2 -5
  68. data/lib/elastic/app-search/api/list_crawler_crawl_requests.rb +6 -8
  69. data/lib/elastic/{workplace-search/api/list_permissions.rb → app-search/api/list_crawler_domains.rb} +12 -13
  70. data/lib/elastic/app-search/api/list_crawler_process_crawls.rb +6 -7
  71. data/lib/elastic/app-search/api/list_curations.rb +3 -6
  72. data/lib/elastic/app-search/api/list_documents.rb +3 -6
  73. data/lib/elastic/app-search/api/list_engines.rb +2 -5
  74. data/lib/elastic/app-search/api/list_synonym_sets.rb +3 -6
  75. data/lib/elastic/app-search/api/log_clickthrough.rb +8 -8
  76. data/lib/elastic/{workplace-search/api/put_user_permissions.rb → app-search/api/put_adaptive_relevance_settings.rb} +12 -14
  77. data/lib/elastic/app-search/api/put_adaptive_relevance_suggestions.rb +50 -0
  78. data/lib/elastic/app-search/api/put_api_key.rb +10 -10
  79. data/lib/elastic/app-search/api/put_crawler_crawl_rule.rb +13 -12
  80. data/lib/elastic/app-search/api/put_crawler_crawl_schedule.rb +7 -7
  81. data/lib/elastic/app-search/api/put_crawler_domain.rb +8 -9
  82. data/lib/elastic/app-search/api/put_crawler_entry_point.rb +10 -9
  83. data/lib/elastic/app-search/api/put_crawler_sitemap.rb +10 -9
  84. data/lib/elastic/app-search/api/put_curation.rb +10 -9
  85. data/lib/elastic/app-search/api/put_documents.rb +3 -4
  86. data/lib/elastic/app-search/api/put_schema.rb +3 -4
  87. data/lib/elastic/app-search/api/put_search_settings.rb +5 -6
  88. data/lib/elastic/app-search/api/put_synonym_set.rb +7 -8
  89. data/lib/elastic/app-search/api/query_suggestion.rb +4 -5
  90. data/lib/elastic/app-search/api/refresh_adaptive_relevance_update_process.rb +55 -0
  91. data/lib/elastic/app-search/api/reset_search_settings.rb +3 -6
  92. data/lib/elastic/app-search/api/schema.rb +3 -6
  93. data/lib/elastic/app-search/api/search.rb +5 -5
  94. data/lib/elastic/app-search/api/search_settings.rb +3 -6
  95. data/lib/elastic/app-search/api/synonym_set.rb +4 -7
  96. data/lib/elastic/app-search/api/top_clicks_analytics.rb +4 -5
  97. data/lib/elastic/app-search/api/top_queries_analytics.rb +3 -4
  98. data/lib/elastic/enterprise-search/api/health.rb +2 -3
  99. data/lib/elastic/enterprise-search/api/put_read_only.rb +5 -4
  100. data/lib/elastic/enterprise-search/api/read_only.rb +2 -3
  101. data/lib/elastic/enterprise-search/api/stats.rb +2 -3
  102. data/lib/elastic/enterprise-search/api/version.rb +2 -3
  103. data/lib/elastic/enterprise-search/client.rb +8 -13
  104. data/lib/elastic/enterprise-search/request.rb +5 -3
  105. data/lib/elastic/enterprise-search/version.rb +1 -1
  106. data/lib/elastic/workplace-search/api/auto_query_refinement_details.rb +3 -4
  107. data/lib/elastic/workplace-search/api/command_sync_jobs.rb +4 -5
  108. data/lib/elastic/workplace-search/api/content_source.rb +3 -4
  109. data/lib/elastic/workplace-search/api/create_analytics_event.rb +16 -12
  110. data/lib/elastic/workplace-search/api/create_batch_synonym_sets.rb +4 -3
  111. data/lib/elastic/workplace-search/api/create_content_source.rb +6 -5
  112. data/lib/elastic/workplace-search/api/create_external_identity.rb +11 -6
  113. data/lib/elastic/workplace-search/api/current_user.rb +3 -5
  114. data/lib/elastic/workplace-search/api/delete_content_source.rb +3 -4
  115. data/lib/elastic/workplace-search/api/delete_documents.rb +4 -4
  116. data/lib/elastic/workplace-search/api/delete_documents_by_query.rb +4 -3
  117. data/lib/elastic/workplace-search/api/delete_external_identity.rb +7 -9
  118. data/lib/elastic/workplace-search/api/delete_synonym_set.rb +3 -5
  119. data/lib/elastic/workplace-search/api/document.rb +4 -6
  120. data/lib/elastic/workplace-search/api/external_identity.rb +7 -9
  121. data/lib/elastic/workplace-search/api/index_documents.rb +3 -4
  122. data/lib/elastic/workplace-search/api/list_content_sources.rb +2 -3
  123. data/lib/elastic/workplace-search/api/list_documents.rb +4 -5
  124. data/lib/elastic/workplace-search/api/list_external_identities.rb +3 -4
  125. data/lib/elastic/workplace-search/api/list_synonym_sets.rb +1 -2
  126. data/lib/elastic/workplace-search/api/put_content_source.rb +6 -6
  127. data/lib/elastic/workplace-search/api/put_content_source_icons.rb +6 -6
  128. data/lib/elastic/workplace-search/api/put_external_identity.rb +11 -10
  129. data/lib/elastic/workplace-search/api/put_synonym_set.rb +4 -4
  130. data/lib/elastic/workplace-search/api/put_triggers_blocklist.rb +3 -5
  131. data/lib/elastic/workplace-search/api/search.rb +13 -13
  132. data/lib/elastic/workplace-search/api/synonym_set.rb +3 -5
  133. data/lib/elastic/workplace-search/api/triggers_blocklist.rb +3 -3
  134. data/spec/app-search/client_spec.rb +29 -0
  135. data/spec/enterprise-search/client_spec.rb +29 -0
  136. data/spec/enterprise-search/request_spec.rb +1 -1
  137. data/spec/integration/app-search/adaptive_relevance_settings_spec.rb +60 -0
  138. data/spec/integration/app-search/adaptive_relevance_suggestions_spec.rb +54 -0
  139. data/spec/integration/app-search/api_logs_spec.rb +11 -3
  140. data/spec/integration/app-search/app_search_helper.rb +2 -2
  141. data/spec/integration/app-search/count_analytics_spec.rb +3 -2
  142. data/spec/integration/app-search/crawler_domain_spec.rb +16 -0
  143. data/spec/integration/app-search/curations_spec.rb +15 -9
  144. data/spec/integration/app-search/engines_spec.rb +24 -26
  145. data/spec/integration/app-search/log_clickthrough_spec.rb +1 -1
  146. data/spec/integration/app-search/meta_engines_spec.rb +5 -5
  147. data/spec/integration/app-search/search_and_multiple_search_spec.rb +1 -1
  148. data/spec/integration/workplace-search/content_sources_spec.rb +6 -6
  149. data/spec/integration/workplace-search/documents_spec.rb +20 -10
  150. data/spec/integration/workplace-search/external_identities_spec.rb +26 -16
  151. data/spec/integration/workplace-search/triggers_spec.rb +2 -2
  152. data/spec/integration/workplace-search/users_spec.rb +0 -6
  153. data/spec/workplace-search/client_spec.rb +29 -0
  154. metadata +27 -19
  155. data/.ci/jobs/elastic+enterprise-search-ruby+7.10.0.beta.1.yml +0 -12
  156. data/.github/compatibility/Gemfile +0 -23
  157. data/.github/workflows/compatibility.yml +0 -20
  158. data/spec/integration/workplace-search/permissions_spec.rb +0 -77
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b57d38a9d4bae9ccd2217e1bd94a06b886a394aafef47a15ba645694404f3183
4
- data.tar.gz: 3f122a3a3400a56afa448de6d3047df37e897867a2a23be1f24026d76fb31e00
3
+ metadata.gz: bdfa7f9a297b7be12956c4afb18c566ef6362be6f80b7ddcdf210a63de35792b
4
+ data.tar.gz: c0ea8e919e929a7a9a03dd183198d7a29f49b95a9fc1e044fb6d1c4becf87adf
5
5
  SHA512:
6
- metadata.gz: 941c3d7645c1126a267662abaf62993581224ef333ad1c6552b52dbeb24508837362afc6f0c6d030e3043567eaebe2b5caa2972571d2610461f15d7f1cf1c88e
7
- data.tar.gz: e85bab13059c21cdade084f4eb6e676be6d091db4b5d8e44326bfa8256b19e76af630ee41d28ecc5ec0a0c52febec826d8fc628d1205d598703b5a2167102363
6
+ metadata.gz: 9bf7a70b4070b475c5929dee3dce93841db5150bd3502b1b22595ed037cc7f9fbb60e4ade158009af80059ee84f727c192663efd4e9913697bb5860110a327f5
7
+ data.tar.gz: 11ce05ae809478b90e8980b43b0c28fdfa33d79bb3d398fcf832d1bdb25c7495600cde089bb9d448d3a39599e17484c59bce1704f8f4f0fc5fc362eb2215ce37
@@ -0,0 +1,12 @@
1
+ ---
2
+ - job:
3
+ name: elastic+enterprise-search-ruby+7.15
4
+ display-name: 'elastic / enterprise-search-ruby # 7.15'
5
+ description: Testing the enterprise-search-ruby 7.15 branch.
6
+ junit_results: "*-junit.xml"
7
+ parameters:
8
+ - string:
9
+ name: branch_specifier
10
+ default: refs/heads/7.15
11
+ description: the Git branch specifier to build (<branchName>, <tagName>,
12
+ <commitId>, etc.)
@@ -0,0 +1,12 @@
1
+ ---
2
+ - job:
3
+ name: elastic+enterprise-search-ruby+7.16
4
+ display-name: 'elastic / enterprise-search-ruby # 7.16'
5
+ description: Testing the enterprise-search-ruby 7.16 branch.
6
+ junit_results: "*-junit.xml"
7
+ parameters:
8
+ - string:
9
+ name: branch_specifier
10
+ default: refs/heads/7.16
11
+ description: the Git branch specifier to build (<branchName>, <tagName>,
12
+ <commitId>, etc.)
data/.ci/test-matrix.yml CHANGED
@@ -3,10 +3,9 @@ RUBY_VERSION:
3
3
  - 3.1
4
4
  - 3.0
5
5
  - 2.7
6
- - 2.6
7
6
 
8
7
  STACK_VERSION:
9
- - 7.17-SNAPSHOT
8
+ - 8.1-SNAPSHOT
10
9
 
11
10
  SERVICE:
12
11
  - appsearch
@@ -1,4 +1,4 @@
1
- name: 7.x
1
+ name: main
2
2
  on: [push, pull_request]
3
3
 
4
4
  jobs:
@@ -7,8 +7,7 @@ jobs:
7
7
  ENDPOINT: http://localhost:8080
8
8
  strategy:
9
9
  matrix:
10
- ruby: [ '2.6', '2.7', '3.0', '3.1' ]
11
-
10
+ ruby: [ '2.7', '3.0', '3.1' ]
12
11
  runs-on: ubuntu-latest
13
12
  steps:
14
13
  - uses: actions/checkout@v2
@@ -26,7 +25,7 @@ jobs:
26
25
  strategy:
27
26
  fail-fast: false
28
27
  matrix:
29
- ruby: [ jruby-9.2 ]
28
+ ruby: [ jruby-9.3 ]
30
29
  runs-on: ubuntu-latest
31
30
  steps:
32
31
  - uses: actions/checkout@v2
data/.rubocop.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.5
2
+ TargetRubyVersion: 2.6
3
3
  Layout/EndAlignment:
4
4
  AutoCorrect: true
5
5
  Style/StringLiterals:
data/CHANGELOG ADDED
@@ -0,0 +1 @@
1
+ See https://www.elastic.co/guide/en/enterprise-search-clients/ruby/current/release_notes.html
data/CODE_OF_CONDUCT ADDED
@@ -0,0 +1 @@
1
+ See: https://www.elastic.co/community/codeofconduct
data/CONTRIBUTING.md CHANGED
@@ -1,5 +1,42 @@
1
1
  # Contributing to enterprise-search-ruby
2
2
 
3
+ ## Run Stack locally
4
+
5
+ A rake task is included to run the Elastic Enterprise Search stack locally via Docker:
6
+
7
+ ```
8
+ $ rake stack[7.10.0]
9
+ ```
10
+
11
+ This will run Elastic Enterprise Search in http://localhost:3002
12
+ - Username: `enterprise_search`
13
+ - Password: `changeme`
14
+
15
+ The version of the Elastic Enterprise Search Stack to use should be the same as tags of `https://www.docker.elastic.co/r/enterprise-search`. You can also use SNAPSHOT builds such as `8.0.0-SNAPSHOT`, `7.11-SNAPSHOT`, etc.
16
+
17
+ ## Running Tests
18
+
19
+ Unit tests for the clients:
20
+
21
+ ```
22
+ $ rake spec:client
23
+ ```
24
+
25
+ Integration tests: you need to have an instance of Enterprise Search running either locally or remotely, and specify the host and credentials in environment variables (see below for a complete dockerized setup). If you're using the included rake task `rake stack[:version]`, you can run the integration tests with the following command:
26
+
27
+ ```
28
+ $ ELASTIC_ENTERPRISE_HOST='http://localhost:3002' \
29
+ ELASTIC_ENTERPRISE_USER='elastic' \
30
+ ELASTIC_ENTERPRISE_PASSWORD='changeme' \
31
+ rake spec:integration
32
+ ```
33
+
34
+ Run integration tests completely within containers, the way we run them on our CI:
35
+ ```
36
+ RUNSCRIPTS=enterprise-search STACK_VERSION=7.10.0 ./.ci/run-tests
37
+ ```
38
+
39
+
3
40
  ## Contributing Code Changes
4
41
 
5
42
  1. Please make sure you have signed the [Contributor License
data/NOTICE ADDED
@@ -0,0 +1,2 @@
1
+ Elastic Enterprise Search Ruby Client
2
+ Copyright 2021 Elasticsearch B.V.
data/README.md CHANGED
@@ -6,48 +6,44 @@
6
6
 
7
7
  Official Ruby API client for [Elastic Enterprise Search](https://www.elastic.co/enterprise-search). Use this gem to integrate App Search and Workplace Search into your Ruby code.
8
8
 
9
- ## Documentation
10
-
11
- [See the documentation](https://www.elastic.co/guide/en/enterprise-search-clients/ruby/current/index.html) for compatibility info, configuring, and an API reference.
12
-
13
- ## Development
14
-
15
- ### Run Stack locally
9
+ ## Installation
16
10
 
17
- A rake task is included to run the Elastic Enterprise Search stack locally via Docker:
11
+ Install the `elastic-enterprise-search` gem from [Rubygems](https://rubygems.org/gems/elastic-enterprise-search):
18
12
 
19
13
  ```
20
- $ rake stack[7.10.0]
14
+ $ gem install elastic-enterprise-search
21
15
  ```
22
16
 
23
- This will run Elastic Enterprise Search in http://localhost:3002
24
- - Username: `enterprise_search`
25
- - Password: `changeme`
17
+ Or add it to your project's Gemfile:
26
18
 
27
- The version of the Elastic Enterprise Search Stack to use should be the same as tags of `https://www.docker.elastic.co/r/enterprise-search`. You can also use SNAPSHOT builds such as `8.0.0-SNAPSHOT`, `7.11-SNAPSHOT`, etc.
19
+ ```ruby
20
+ gem 'elastic-enterprise-search', 'VERSION'
21
+ ```
28
22
 
29
- ### Running Tests
23
+ The Enterprise Search client is implemented with [`elastic-transport`](https://github.com/elastic/elastic-transport-ruby/) as the HTTP layer, which uses [Faraday](https://rubygems.org/gems/faraday). Faraday supports several [adapters](https://lostisland.github.io/faraday/adapters/) and will use `Net::HTTP` by default. For optimal performance with the Enterprise Search API, we suggest using an HTTP library which supports persistent ("keep-alive") connections. For the standard Ruby implementation, this could be https://github.com/drbrain/net-http-persistent[Net::HTTP::Persistent], [patron](https://github.com/toland/patron) or [Typhoeus](https://github.com/typhoeus/typhoeus). For JRuby, [Manticore](https://github.com/cheald/manticore) is a great option as well. Require the library for the adapter in your code and then pass in the `:adapter` parameter to the client when you initialize it:
30
24
 
31
- Unit tests for the clients:
25
+ ```ruby
26
+ require 'elastic-enterprise-search'
27
+ require 'faraday/net_http_persistent'
32
28
 
29
+ client = Elastic::EnterpriseSearch::Client.new(adapter: :net_http_persistent)
33
30
  ```
34
- $ rake spec:client
35
- ```
31
+ If an adapter is not specified, the client will try to auto-detect available libraries and use the best available HTTP client.
36
32
 
37
- Integration tests: you need to have an instance of Enterprise Search running either locally or remotely, and specify the host and credentials in environment variables (see below for a complete dockerized setup). If you're using the included rake task `rake stack[:version]`, you can run the integration tests with the following command:
33
+ ## Documentation
38
34
 
39
- ```
40
- $ ELASTIC_ENTERPRISE_HOST='http://localhost:3002' \
41
- ELASTIC_ENTERPRISE_USER='elastic' \
42
- ELASTIC_ENTERPRISE_PASSWORD='changeme' \
43
- rake spec:integration
44
- ```
35
+ [See the documentation](https://www.elastic.co/guide/en/enterprise-search-clients/ruby/current/index.html) for usage, code examples, configuring the client, and an API reference.
45
36
 
46
- Run integration tests completely within containers, the way we run them on our CI:
47
- ```
48
- RUNSCRIPTS=enterprise-search STACK_VERSION=7.10.0 ./.ci/run-tests
49
- ```
37
+ See code examples of usage for the [Enteprise Search](https://www.elastic.co/guide/en/enterprise-search-clients/ruby/current/enterprise-search-api.html), [App Search](https://www.elastic.co/guide/en/enterprise-search-clients/ruby/current/app-search-api.html) and [Workplace Search](https://www.elastic.co/guide/en/enterprise-search-clients/ruby/current/workplace-search-api.html) APIs.
38
+
39
+ ## Compatibility
40
+
41
+ We follow Ruby’s own maintenance policy and officially support all currently maintained versions per [Ruby Maintenance Branches](https://www.ruby-lang.org/en/downloads/branches/).
42
+
43
+ ## Development
44
+
45
+ See [CONTRIBUTING](https://github.com/elastic/enterprise-search-ruby/blob/main/CONTRIBUTING.md).
50
46
 
51
47
  ## License
52
48
 
53
- Apache-2.0
49
+ This software is licensed under the [Apache 2 license](./LICENSE). See [NOTICE](./NOTICE).
@@ -8,7 +8,7 @@ This document includes examples for different API requests. Please refer to the
8
8
  [source,rb]
9
9
  ----------------------------
10
10
  # Create an engine
11
- client.create_engine(name: 'videogames')
11
+ client.create_engine(body: { name: 'videogames' })
12
12
 
13
13
  # List all engines
14
14
  client.list_engines
@@ -30,7 +30,7 @@ body = {
30
30
  type: 'meta',
31
31
  source_engines: [ 'books', 'videogames' ]
32
32
  }
33
- client.create_engine(name: engine_name, body: body)
33
+ client.create_engine(body: body)
34
34
 
35
35
  # Add a source engine to a meta engine:
36
36
  client.add_meta_engine_source(meta_engine_name, source_engines: ['engine1', 'engine2'])
@@ -123,11 +123,13 @@ client.delete_synonym_set(engine_name, synonym_set_id: id)
123
123
  ----------------------------
124
124
  # Create a curation
125
125
  client.create_curation(
126
- engine_name,
127
- queries: ['query1'],
128
- promoted: ['doc-id1'],
129
- hidden: ['doc-id2']
130
- )
126
+ engine_name,
127
+ body: {
128
+ queries: ['query1'],
129
+ promoted: ['doc-id1'],
130
+ hidden: ['doc-id2']
131
+ }
132
+ )
131
133
 
132
134
  # Retrieve a curation by id:
133
135
  client.curation(engine_name, curation_id: 'cur-id')
@@ -135,10 +137,14 @@ client.curation(engine_name, curation_id: 'cur-id')
135
137
  # Update an existing curation:
136
138
  client.put_curation(
137
139
  engine_name,
138
- curation_id: 'cur-id',
139
- queries: ['query1'],
140
- promoted: ['doc-id2'],
141
- hidden: ['doc-id1']
140
+ {
141
+ curation_id: 'cur-id',
142
+ body: {
143
+ queries: ['query1'],
144
+ promoted: ['doc-id2'],
145
+ hidden: ['doc-id1']
146
+ }
147
+ }
142
148
  )
143
149
 
144
150
  # List existing curations:
@@ -178,13 +184,6 @@ client.delete_api_key(api_key_name: name)
178
184
 
179
185
  === Web Crawler
180
186
 
181
- [CAUTION]
182
- ====
183
- The Elastic Enterprise Search web crawler API is a *beta* feature.
184
- Beta features are subject to change and are not covered by the support SLA of general release (GA) features.
185
- Elastic plans to promote this feature to GA in a future release.
186
- ====
187
-
188
187
  See https://www.elastic.co/guide/en/app-search/current/web-crawler-api-reference.html[Web Crawler API reference] for more information.
189
188
 
190
189
  [source,rb]
@@ -196,6 +195,9 @@ client.create_crawler_domain(engine_name, body: body)
196
195
  # Get crawler domain information
197
196
  client.crawler_domain(engine_name, domain_id: domain_id)
198
197
 
198
+ # List crawler domains
199
+ client.list_crawler_domains(engine_name)
200
+
199
201
  # Update a crawler domain
200
202
  body = { name: 'https://www.wikipedia.org' }
201
203
  client.put_crawler_domain(engine_name, domain_id: domain_id, domain: body)
@@ -302,6 +304,38 @@ client.crawler_process_crawl_denied_urls(engine_name, process_crawl_id: id)
302
304
  client.delete_crawler_active_crawl_request(engine_name)
303
305
  ----------------------------
304
306
 
307
+ === Adaptive Relevance Suggestions
308
+
309
+ [source,rb]
310
+ ----------------------------
311
+ # Update an adaptive relevance suggestion
312
+ body = [{ query: 'forest', type: 'curation', status: 'applied' }]
313
+ client.put_adaptive_relevance_suggestions(engine_name, body: body)
314
+
315
+ # Retrieve an adaptive relevance suggestion
316
+ client.adaptive_relevance_suggestions(engine_name, search_suggestion_query: 'test')
317
+
318
+ # List adaptive relevance suggestions
319
+ client.list_adaptive_relevance_suggestions(engine_name)
320
+ ----------------------------
321
+
322
+ === Adaptive Relevance Settings
323
+
324
+ [source,rb]
325
+ ----------------------------
326
+ # Show the settings for an engine
327
+ client.adaptive_relevance_settings(engine_name)
328
+
329
+ # Update relevance settings
330
+ body = {
331
+ curation: { enabled: true }
332
+ }
333
+ client.put_adaptive_relevance_settings(engine_name, body: body)
334
+
335
+ # Refresh adaptive relevance update process
336
+ client.refresh_adaptive_relevance_update_process(engine_name, adaptive_relevance_suggestion_type: 'curation')
337
+ ----------------------------
338
+
305
339
  === Other API Endpoints
306
340
 
307
341
  [source,rb]
@@ -14,11 +14,19 @@ For **Elastic Enterprise Search 7.0** and later, use the major version 7 (`7.x.y
14
14
 
15
15
  [discrete]
16
16
  === HTTP Library
17
- This library uses https://github.com/elastic/elasticsearch-ruby/tree/main/elasticsearch-transport[elasticsearch-transport], the low-level Ruby client for connecting to an Elasticsearch cluster - also used in the official https://github.com/elastic/elasticsearch-ruby[Elasticsearch Ruby Client].
17
+ This library uses https://github.com/elastic/elastic-transport-ruby[elastic-transport], the low-level Ruby client for connecting to an Elastic clusters - also used in the official https://github.com/elastic/elasticsearch-ruby[Elasticsearch Ruby Client]. It uses https://rubygems.org/gems/faraday[Faraday], which supports several https://lostisland.github.io/faraday/adapters/[adapters] and will use `Net::HTTP` by default. For optimal performance with the Enterprise Search API, we suggest using an HTTP library which supports persistent ("keep-alive") connections. For the standard Ruby implementation, this could be https://github.com/drbrain/net-http-persistent[Net::HTTP::Persistent], https://github.com/toland/patron[patron] or https://github.com/typhoeus/typhoeus[Typhoeus]. For JRuby, https://github.com/cheald/manticore[Manticore] is a great option as well. Require the library for the adapter in your code and then pass in the `:adapter` parameter to the client when you initialize it:
18
18
 
19
- All requests, if successful, will return an `Elasticsearch::Transport::Transport::Response` instance. You can access the response `body`, `headers` and `status`.
19
+ [source,ruby]
20
+ ---------------------------------------------------
21
+ require 'elastic-enterprise-search'
22
+ require 'faraday/net_http_persistent'
20
23
 
21
- `elasticsearch-transport` defines a https://github.com/elasticsearch/elasticsearch-ruby/blob/main/elasticsearch-transport/lib/elasticsearch/transport/transport/errors.rb[number of exception classes] for various client and server errors, as well as unsuccessful HTTP responses, making it possible to rescue specific exceptions with desired granularity. More details https://github.com/elastic/elasticsearch-ruby/tree/main/elasticsearch-transport#exception-handling[here]. You can find the full documentation for `elasticsearch-transport` at https://rubydoc.info/gems/elasticsearch-transport[RubyDoc].
24
+ client = Elastic::EnterpriseSearch::Client.new(adapter: :net_http_persistent)
25
+ ---------------------------------------------------
26
+
27
+ All requests, if successful, will return an `Elastic::Transport::Transport::Response` instance. You can access the response `body`, `headers` and `status`.
28
+
29
+ `elastic-transport` defines a https://github.com/elastic/elastic-transport-ruby/blob/main/lib/elastic/transport/transport/errors.rb[number of exception classes] for various client and server errors, as well as unsuccessful HTTP responses, making it possible to rescue specific exceptions with desired granularity. More details https://github.com/elastic/elastic-transport-ruby#exception-handling[here]. You can find the full documentation for `elastic-transport` at https://rubydoc.info/gems/elastic-transport[RubyDoc].
22
30
 
23
31
  The clients pass different options to transport, you can check them out https://rubydoc.info/github/elastic/enterprise-search-ruby/Elastic/EnterpriseSearch/Client[on RubyDocs].
24
32
 
@@ -26,3 +26,13 @@
26
26
 
27
27
  - Updates source code documentation for `current_page` and `page_size` parameters from type `String` to `Integer`.
28
28
  - In `multi_search`, the body parameter is renamed to `body` from `queries` to avoid repetition and potential confusion.
29
+
30
+ [discrete]
31
+ ==== Workplace Search
32
+
33
+ - Body parameter renamed to `document_ids` in `delete_documents`:
34
+
35
+ [source,rb]
36
+ ----------------------------
37
+ client.delete_documents(content_source_id, document_ids: ['e68fbc2688f1', 'c535e226aee3'])
38
+ ----------------------------
@@ -0,0 +1,117 @@
1
+ [[release_notes_80]]
2
+ === 8.0.0 Release notes
3
+
4
+ [discrete]
5
+ ==== General
6
+
7
+ First release in the `8.x` branch of the client.
8
+
9
+ - Tested with Elastic Enterprise Search API version 8.0-SNAPSHOT.
10
+ - Tested with Ruby 2.7, 3.0, 3.1, JRuby 9.3. Older versions of Ruby have reached end of life and been removed from the testing matrices. Minimum required Ruby version is Ruby 2.6 to keep compatibility with JRuby 9.3, but it may be upgraded to 2.7 once JRuby 9.4 comes out.
11
+ - API: Updated endpoints that make a `GET` or `DELETE` requests to not have a `body`. Requests with `PUT` and `POST` now expect most parameters to be in the request body. Parameters that were available as both arguments and in the body are now just in the body.
12
+ - API: An updated generator is being used to generate the endpoint code. The source code documentation has better typing hints for parameters.
13
+
14
+ [discrete]
15
+ ==== Response Object
16
+
17
+ * Requests now return an `Elastic::API::Response` object. This behaves exactly the same as the previous response (`Elastic::Transport::Transport::Response`) but expands its functionality. With the previous response object, the body of the response had to be accessed calling the `body` method on the response. This new object behaves like the response.body Hash object, except when the `status` or `headers` are sent to it. This makes it easier to access the response data. Example:
18
+
19
+ +
20
+ [source,rb]
21
+ ----------------------------
22
+ client = Elastic::EnterpriseSearch::Client.new(
23
+ host: 'http://localhost:3002',
24
+ http_auth: {user: 'elastic', password: 'changeme'}
25
+ )
26
+ response = client.health
27
+ response.class
28
+ # => Elastic::API::Response
29
+ response['version']['number']
30
+ # => "8.1.4"
31
+ response.body['version']['number']
32
+ # => "8.1.4"
33
+ response.status
34
+ # => 200
35
+ response.headers
36
+ # =>
37
+ {"date"=>"Tue, 10 May 2022 09:01:10 GMT",
38
+ "content-type"=>"application/json;charset=utf-8",
39
+ "etag"=>"W/\"etag--gzip\"",
40
+ "cache-control"=>"max-age=0, private, must-revalidate",
41
+ "x-request-id"=>"id",
42
+ "x-runtime"=>"0.023468",
43
+ "vary"=>"Accept-Encoding, User-Agent",
44
+ "content-length"=>"755",
45
+ "server"=>"Jetty(9.4.43.v20210629)"}
46
+ ----------------------------
47
+
48
+ [discrete]
49
+ ==== App Search
50
+
51
+ [discrete]
52
+ ===== API Changes
53
+
54
+ - API Logs: Removes `date` parameters for filters. This API requires a nested date object under `filters` (now passed in via the body) containing `from` and `to` keys formatted in accordance with RFC3339. The App Search client provides the helper function `date_to_rfc3339` which receives a date String and converts it to the right format.
55
+ - Crawler API : Internal Url updated from `v0` to `v1`. `create_crawler_crawl_rule` body is a required parameter (`order`, `policy`, `rule`, `pattern`). `create_crawler_entry_point` body is required (for `value`). `create_crawler_sitemap` body is required (for `url`). `put_crawler_crawl_rule` body is required (`order`, `policy`, `rule`, `pattern`). `put_crawler_crawl_schedule` body is required (`frequency`, `unit`). `put_crawler_entry_point` body is required (for `value`). `put_crawler_sitemap` body is required (`url`).
56
+ - Curations API: parameters for `create_curation` and `put_curation` must be passed in inside the body parameter now.
57
+ - Engine APIs: `create_engine` removes the `name` parameter. It must be passed in inside the body parameter now.
58
+ - Log Click: `log_clickthrough` now requires `body`, the parameter `query` and `document_id` are required.
59
+ - Search: When using `search`, query can no longer be sent as an argument. The method will raise `ArgumentError` if no body is sent, since `query` is a required parameter in the body.
60
+ - APIs where `body` has been removed since it's not used: `delete_engine`, `engine`, `list_engines`, `curation`, `delete_curation`, `schema`, `api_key`, `delete_api_key`, `list_api_keys`, `delete_synonym_set`, `list_synonym_set`, `synonym_set`, `list_documents`, `reset_search_settings`, `search_settings`, `crawler_active_crawl_request`, `crawler_crawl_request`, `crawler_crawl_schedule`, `crawler_domain`, `crawler_metrics`, `crawler_overview`, `crawler_process_crawl`, `crawler_process_crawl_denied_urls`, `crawler_user_agent`, `delete_crawler_active_crawl_request`, `delete_crawler_crawl_rule`, `delete_crawler_crawl_schedule`, `delete_crawler_domain`, `delete_crawler_entry_point`, `delete_crawler_sitemap`, `list_crawler_crawl_requests`, `list_crawler_process_crawls`.
61
+
62
+ [discrete]
63
+ ===== New APIs
64
+
65
+ * `list_crawler_domain`: Lists crawler domains given an engine.
66
+ * Adaptive Relevance Suggestion APIs:
67
+ ** `adaptive_relevance_suggestions` - Retrieves adaptive relevance for a single query.
68
+ ** `list_adaptive_relevance_suggestions` - List the adaptive relevance suggestions for a given engine.
69
+ ** `put_adaptive_relevance_suggestions` - Update adaptive relevance.
70
+ * Adaptive Relevance Settings APIs:
71
+ ** `adaptive_relevance_settings` - Retrieve adaptive relevance settings.
72
+ ** `put_adaptive_relevance_settings` - Update adaptive relevance settings.
73
+ ** `refresh_adaptive_relevance_update_process` - Update suggestions process refresh.
74
+
75
+ [discrete]
76
+ ==== Enterprise Search
77
+
78
+ - Read-Only API: `put_read_only` body is now required with the enabled object: `{enabled: true|false}`.
79
+ - APIs where `body` has been removed since it's not used: `health`, `read_only`, `stats`, `version`.
80
+
81
+ [discrete]
82
+ ==== Workplace Search
83
+
84
+ [discrete]
85
+ ===== API Changes
86
+
87
+ * Permissions APIs have been removed: `add_user_permissions`, `list_permissions`, `put_user_permissions`, `remove_user_permissions`, `user_permissions`.
88
+ * `current_user` removed `get_token` parameter.
89
+ * Analytics: `create_analytics_events` will raise ArgumentError if body is missing (Required: type, query_id, page, content_source_id, document_id, rank)
90
+ * Content Sources: `create_content_source` will raise ArgumentError if body is missing (Required: name). `name` cannot be passed in as a parameter anymore, needs to be in the body. `put_content_source` will raise ArgumentError if body is missing (Required: name, is_searchable). `put_content_source_icons` will raise ArgumentError if body is missing.
91
+ * External Identities: `create_external_identity` will raise ArgumentError if body is missing (Required: external_user_id, external_user_properties, permissions). Body parameters have changed:
92
+
93
+ +
94
+ [source,rb]
95
+ ----------------------------
96
+ body = {
97
+ external_user_id: external_user_id,
98
+ permissions: [],
99
+ external_user_properties: [
100
+ 'attribute_name' => '_elasticsearch_username',
101
+ 'attribute_value' => 'fernando'
102
+ ]
103
+ }
104
+ client.create_external_identity(content_source_id, body: body)
105
+ ----------------------------
106
+ +
107
+ In `delete_external_identity`, `external_identity` and `put_external_identity` the required parameter changed from `user` to `external_user_id`.
108
+ See https://www.elastic.co/guide/en/workplace-search/current/workplace-search-external-identities-api.html
109
+ * Search: Parameters need to be passed in via body to `search`. It will raise ArgumentError if body is missing.
110
+ * Documents: `delete_documents` will raise ArgumentError if body is missing (Required document_ids).
111
+ * Sync Jobs: `command_sync_jobs` will raise ArgumentError if body is missing.
112
+ * Synonyms: `create_batch_synonym_sets`, `put_synonym_set` will raise ArgumentError if body is missing.
113
+ * APIs where `body` has been removed since it's not used: `auto_query_refinement_details`, `content_source`, `current_user`, `delete_content_source`, `delete_external_identity`, `delete_synonym_set`, `document`, `external_identity`, `list_content_sources`, `list_external_identities`, `put_triggers_blocklist`, `synonym_set`, `triggers_blocklist`.
114
+
115
+ [discrete]
116
+ ===== New APIs
117
+ - `list_documents`: Lists documents from a custom content source.
@@ -0,0 +1,8 @@
1
+ [[release_notes_81]]
2
+ === 8.1.0 Release notes
3
+
4
+ [discrete]
5
+ ==== General
6
+
7
+ - Tested with Elastic Enterprise Search API version 8.1.0.
8
+ - Tested with Ruby 2.7, 3.0, 3.1, JRuby 9.3. Older versions of Ruby have reached end of life and been removed from the testing matrices. Minimum required Ruby version is Ruby 2.6 to keep compatibility with JRuby 9.3, but it may be upgraded to 2.7 once JRuby 9.4 comes out.
@@ -1,6 +1,10 @@
1
1
  [[release_notes]]
2
2
  == Release Notes
3
3
 
4
+ [discrete]
5
+ === 8.x
6
+ * <<release_notes_81, 8.1.0 Release Notes>>
7
+ * <<release_notes_80, 8.0.0 Release Notes>>
4
8
 
5
9
  [discrete]
6
10
  === 7.x
@@ -14,6 +18,8 @@
14
18
  * <<release_notes_711, 7.11.0 Release Notes>>
15
19
  * <<release_notes_710, 7.10.0.beta.1 Release Notes>>
16
20
 
21
+ include::81.asciidoc[]
22
+ include::80.asciidoc[]
17
23
  include::717.asciidoc[]
18
24
  include::716.asciidoc[]
19
25
  include::715.asciidoc[]
@@ -6,10 +6,10 @@
6
6
  [source,rb]
7
7
  ----------------------------
8
8
  # Create a custom content source
9
- client.create_content_source(name: 'test')
9
+ client.create_content_source(body: { name: 'test' })
10
10
 
11
11
  # Retrieve a content source by ID
12
- content_source_id = client.create_content_source(name: 'books').body['id']
12
+ content_source_id = client.create_content_source(body: { name: 'books' }).body['id']
13
13
  client.content_source(content_source_id)
14
14
 
15
15
  # Delete a content source by ID
@@ -139,21 +139,28 @@ client.remove_user_permissions(
139
139
  [source,rb]
140
140
  ----------------------------
141
141
  # Create external identities
142
- body = { user: 'elastic_user', source_user_id: 'example@elastic.co' }
142
+ body = {
143
+ external_user_id: external_user_id,
144
+ permissions: [],
145
+ external_user_properties: [
146
+ 'attribute_name' => '_elasticsearch_username',
147
+ 'attribute_value' => 'fernando'
148
+ ]
149
+ }
143
150
  client.create_external_identity(content_source_id, body: body)
144
151
 
145
152
  # Retrieve an external identity
146
- client.external_identity(content_source_id, user: 'elastic_user')
153
+ client.external_identity(content_source_id, external_user_id: external_user_id)
147
154
 
148
155
  # List external identities
149
156
  client.list_external_identities(content_source_id)
150
157
 
151
158
  # Update external identity
152
- body = { source_user_id: 'example2@elastic.co' }
153
- client.put_external_identity(content_source_id, user: 'elastic_user', body: body)
159
+ body = { external_user_id: external_user_id, permissions: ['permission1'] }
160
+ client.put_external_identity(content_source_id, external_user_id: external_user_id, body: body)
154
161
 
155
162
  # Delete an external identity
156
- client.delete_external_identity(content_source_id, user: 'elastic_user')
163
+ client.delete_external_identity(content_source_id, external_user_id: external_user_id)
157
164
  ----------------------------
158
165
 
159
166
  === Search
@@ -22,7 +22,7 @@ require 'elastic/enterprise-search/version'
22
22
 
23
23
  # rubocop:disable Metrics/BlockLength
24
24
  Gem::Specification.new do |s|
25
- s.required_ruby_version = '>= 2.5'
25
+ s.required_ruby_version = '>= 2.6'
26
26
  s.name = 'elastic-enterprise-search'
27
27
  s.version = Elastic::EnterpriseSearch::VERSION
28
28
  s.authors = ['Fernando Briano']
@@ -47,13 +47,13 @@ Gem::Specification.new do |s|
47
47
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
48
48
  s.require_paths = ['lib']
49
49
 
50
- s.add_dependency 'elasticsearch-transport', '>= 7.11'
50
+ s.add_dependency 'elastic-transport', '8.0.0.pre.1'
51
51
  s.add_runtime_dependency 'jwt', '>= 1.5', '< 3.0'
52
52
  s.add_development_dependency 'awesome_print'
53
53
  s.add_development_dependency 'byebug' unless defined?(JRUBY_VERSION)
54
54
  s.add_development_dependency 'rspec', '~> 3.9.0'
55
55
  s.add_development_dependency 'rspec_junit_formatter'
56
- s.add_development_dependency 'rubocop', '~> 1.0.0'
56
+ s.add_development_dependency 'rubocop', '~> 1'
57
57
  s.add_development_dependency 'vcr', '~> 3.0.3'
58
58
  s.add_development_dependency 'webmock'
59
59
  end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed to Elasticsearch B.V. under one or more contributor
4
+ # license agreements. See the NOTICE file distributed with
5
+ # this work for additional information regarding copyright
6
+ # ownership. Elasticsearch B.V. licenses this file to you under
7
+ # the Apache License, Version 2.0 (the "License"); you may
8
+ # not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
20
+ module Elastic
21
+ module API
22
+ # Elastic client API Response object. Receives an Elastic::Transport::Transport::Response in
23
+ # the initializer and behaves like a Hash, except when status or headers are called upon it, in
24
+ # which case it returns the original object's status and headers.
25
+ # This class is based on Elasticsearch::API::Response in the Elasticsearch client. For future
26
+ # versions, we'll want this to live in elastic-transport instead.
27
+ class Response
28
+ RESPONSE_METHODS = [:status, :body, :headers].freeze
29
+
30
+ def initialize(response)
31
+ @response = response
32
+ end
33
+
34
+ def method_missing(method, *args, &block)
35
+ if RESPONSE_METHODS.include? method
36
+ @response.send method.to_sym
37
+ else
38
+ @response.body.send(method.to_sym, *args, &block)
39
+ end
40
+ end
41
+
42
+ def respond_to_missing?(method_name, include_private = false)
43
+ @response.body.respond_to?(method_name, include_private) ||
44
+ RESPONSE_METHODS.include?(method_name)
45
+ end
46
+
47
+ def to_s
48
+ @response.body.to_s
49
+ end
50
+ end
51
+ end
52
+ end