couchbase 3.5.3-arm64-darwin
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.
- checksums.yaml +7 -0
- data/LICENSE.txt +202 -0
- data/README.md +154 -0
- data/ext/extconf.rb +0 -0
- data/lib/active_support/cache/couchbase_store.rb +342 -0
- data/lib/couchbase/3.1/libcouchbase.bundle +0 -0
- data/lib/couchbase/3.2/libcouchbase.bundle +0 -0
- data/lib/couchbase/3.3/libcouchbase.bundle +0 -0
- data/lib/couchbase/analytics_options.rb +109 -0
- data/lib/couchbase/authenticator.rb +66 -0
- data/lib/couchbase/binary_collection.rb +130 -0
- data/lib/couchbase/binary_collection_options.rb +26 -0
- data/lib/couchbase/bucket.rb +146 -0
- data/lib/couchbase/cluster.rb +462 -0
- data/lib/couchbase/cluster_registry.rb +49 -0
- data/lib/couchbase/collection.rb +707 -0
- data/lib/couchbase/collection_options.rb +401 -0
- data/lib/couchbase/config_profiles.rb +57 -0
- data/lib/couchbase/configuration.rb +58 -0
- data/lib/couchbase/datastructures/couchbase_list.rb +160 -0
- data/lib/couchbase/datastructures/couchbase_map.rb +194 -0
- data/lib/couchbase/datastructures/couchbase_queue.rb +134 -0
- data/lib/couchbase/datastructures/couchbase_set.rb +128 -0
- data/lib/couchbase/datastructures.rb +26 -0
- data/lib/couchbase/diagnostics.rb +183 -0
- data/lib/couchbase/errors.rb +414 -0
- data/lib/couchbase/json_transcoder.rb +41 -0
- data/lib/couchbase/key_value_scan.rb +119 -0
- data/lib/couchbase/libcouchbase.rb +6 -0
- data/lib/couchbase/logger.rb +87 -0
- data/lib/couchbase/management/analytics_index_manager.rb +1129 -0
- data/lib/couchbase/management/bucket_manager.rb +445 -0
- data/lib/couchbase/management/collection_manager.rb +472 -0
- data/lib/couchbase/management/collection_query_index_manager.rb +224 -0
- data/lib/couchbase/management/query_index_manager.rb +619 -0
- data/lib/couchbase/management/scope_search_index_manager.rb +200 -0
- data/lib/couchbase/management/search_index_manager.rb +426 -0
- data/lib/couchbase/management/user_manager.rb +470 -0
- data/lib/couchbase/management/view_index_manager.rb +239 -0
- data/lib/couchbase/management.rb +31 -0
- data/lib/couchbase/mutation_state.rb +65 -0
- data/lib/couchbase/options.rb +2846 -0
- data/lib/couchbase/protostellar/binary_collection.rb +55 -0
- data/lib/couchbase/protostellar/bucket.rb +55 -0
- data/lib/couchbase/protostellar/client.rb +99 -0
- data/lib/couchbase/protostellar/cluster.rb +171 -0
- data/lib/couchbase/protostellar/collection.rb +152 -0
- data/lib/couchbase/protostellar/connect_options.rb +63 -0
- data/lib/couchbase/protostellar/error_handling.rb +203 -0
- data/lib/couchbase/protostellar/generated/admin/bucket/v1/bucket_pb.rb +61 -0
- data/lib/couchbase/protostellar/generated/admin/bucket/v1/bucket_services_pb.rb +35 -0
- data/lib/couchbase/protostellar/generated/admin/collection/v1/collection_pb.rb +57 -0
- data/lib/couchbase/protostellar/generated/admin/collection/v1/collection_services_pb.rb +36 -0
- data/lib/couchbase/protostellar/generated/admin/query/v1/query_pb.rb +61 -0
- data/lib/couchbase/protostellar/generated/admin/query/v1/query_services_pb.rb +37 -0
- data/lib/couchbase/protostellar/generated/admin/search/v1/search_pb.rb +72 -0
- data/lib/couchbase/protostellar/generated/admin/search/v1/search_services_pb.rb +44 -0
- data/lib/couchbase/protostellar/generated/analytics/v1/analytics_pb.rb +52 -0
- data/lib/couchbase/protostellar/generated/analytics/v1/analytics_services_pb.rb +30 -0
- data/lib/couchbase/protostellar/generated/internal/hooks/v1/hooks_pb.rb +70 -0
- data/lib/couchbase/protostellar/generated/internal/hooks/v1/hooks_services_pb.rb +36 -0
- data/lib/couchbase/protostellar/generated/kv/v1/kv_pb.rb +97 -0
- data/lib/couchbase/protostellar/generated/kv/v1/kv_services_pb.rb +46 -0
- data/lib/couchbase/protostellar/generated/query/v1/query_pb.rb +57 -0
- data/lib/couchbase/protostellar/generated/query/v1/query_services_pb.rb +30 -0
- data/lib/couchbase/protostellar/generated/routing/v1/routing_pb.rb +52 -0
- data/lib/couchbase/protostellar/generated/routing/v1/routing_services_pb.rb +30 -0
- data/lib/couchbase/protostellar/generated/search/v1/search_pb.rb +99 -0
- data/lib/couchbase/protostellar/generated/search/v1/search_services_pb.rb +30 -0
- data/lib/couchbase/protostellar/generated/transactions/v1/transactions_pb.rb +57 -0
- data/lib/couchbase/protostellar/generated/transactions/v1/transactions_services_pb.rb +36 -0
- data/lib/couchbase/protostellar/generated/view/v1/view_pb.rb +51 -0
- data/lib/couchbase/protostellar/generated/view/v1/view_services_pb.rb +30 -0
- data/lib/couchbase/protostellar/generated.rb +9 -0
- data/lib/couchbase/protostellar/management/bucket_manager.rb +67 -0
- data/lib/couchbase/protostellar/management/collection_manager.rb +94 -0
- data/lib/couchbase/protostellar/management/collection_query_index_manager.rb +124 -0
- data/lib/couchbase/protostellar/management/query_index_manager.rb +112 -0
- data/lib/couchbase/protostellar/management.rb +24 -0
- data/lib/couchbase/protostellar/request.rb +78 -0
- data/lib/couchbase/protostellar/request_behaviour.rb +42 -0
- data/lib/couchbase/protostellar/request_generator/admin/bucket.rb +124 -0
- data/lib/couchbase/protostellar/request_generator/admin/collection.rb +94 -0
- data/lib/couchbase/protostellar/request_generator/admin/query.rb +130 -0
- data/lib/couchbase/protostellar/request_generator/admin.rb +24 -0
- data/lib/couchbase/protostellar/request_generator/kv.rb +474 -0
- data/lib/couchbase/protostellar/request_generator/query.rb +133 -0
- data/lib/couchbase/protostellar/request_generator/search.rb +387 -0
- data/lib/couchbase/protostellar/request_generator.rb +26 -0
- data/lib/couchbase/protostellar/response_converter/admin/bucket.rb +55 -0
- data/lib/couchbase/protostellar/response_converter/admin/collection.rb +42 -0
- data/lib/couchbase/protostellar/response_converter/admin/query.rb +59 -0
- data/lib/couchbase/protostellar/response_converter/admin.rb +24 -0
- data/lib/couchbase/protostellar/response_converter/kv.rb +151 -0
- data/lib/couchbase/protostellar/response_converter/query.rb +84 -0
- data/lib/couchbase/protostellar/response_converter/search.rb +136 -0
- data/lib/couchbase/protostellar/response_converter.rb +26 -0
- data/lib/couchbase/protostellar/retry/action.rb +38 -0
- data/lib/couchbase/protostellar/retry/orchestrator.rb +60 -0
- data/lib/couchbase/protostellar/retry/reason.rb +67 -0
- data/lib/couchbase/protostellar/retry/strategies/best_effort.rb +49 -0
- data/lib/couchbase/protostellar/retry/strategies.rb +26 -0
- data/lib/couchbase/protostellar/retry.rb +28 -0
- data/lib/couchbase/protostellar/scope.rb +57 -0
- data/lib/couchbase/protostellar/timeout_defaults.rb +30 -0
- data/lib/couchbase/protostellar/timeouts.rb +83 -0
- data/lib/couchbase/protostellar.rb +29 -0
- data/lib/couchbase/query_options.rb +122 -0
- data/lib/couchbase/railtie.rb +47 -0
- data/lib/couchbase/raw_binary_transcoder.rb +39 -0
- data/lib/couchbase/raw_json_transcoder.rb +40 -0
- data/lib/couchbase/raw_string_transcoder.rb +42 -0
- data/lib/couchbase/scope.rb +258 -0
- data/lib/couchbase/search_options.rb +1650 -0
- data/lib/couchbase/subdoc.rb +293 -0
- data/lib/couchbase/transcoder_flags.rb +64 -0
- data/lib/couchbase/utils/generic_logger_adapter.rb +40 -0
- data/lib/couchbase/utils/stdlib_logger_adapter.rb +67 -0
- data/lib/couchbase/utils/time.rb +71 -0
- data/lib/couchbase/utils.rb +23 -0
- data/lib/couchbase/version.rb +25 -0
- data/lib/couchbase/view_options.rb +67 -0
- data/lib/couchbase.rb +30 -0
- data/lib/rails/generators/couchbase/config/config_generator.rb +29 -0
- metadata +190 -0
@@ -0,0 +1,200 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2024. Couchbase, Inc.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may 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, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
module Couchbase
|
18
|
+
module Management
|
19
|
+
class ScopeSearchIndexManager
|
20
|
+
alias inspect to_s
|
21
|
+
|
22
|
+
# @param [Couchbase::Backend] backend
|
23
|
+
# @param [String] bucket_name
|
24
|
+
# @param [String] scope_name
|
25
|
+
def initialize(backend, bucket_name, scope_name)
|
26
|
+
@backend = backend
|
27
|
+
@bucket_name = bucket_name
|
28
|
+
@scope_name = scope_name
|
29
|
+
end
|
30
|
+
|
31
|
+
# Fetches an index from the server if it exists
|
32
|
+
#
|
33
|
+
# @param [String] index_name name of the index
|
34
|
+
# @param [GetIndexOptions] options
|
35
|
+
#
|
36
|
+
# @return [SearchIndex]
|
37
|
+
#
|
38
|
+
# @raise [ArgumentError]
|
39
|
+
# @raise [Error::IndexNotFound]
|
40
|
+
def get_index(index_name, options = GetIndexOptions.new)
|
41
|
+
res = @backend.search_index_get(@bucket_name, @scope_name, index_name, options.timeout)
|
42
|
+
SearchIndexManager.extract_search_index(res)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Fetches all indexes from the server
|
46
|
+
#
|
47
|
+
# @param [GetAllIndexesOptions] options
|
48
|
+
#
|
49
|
+
# @return [Array<SearchIndex>]
|
50
|
+
def get_all_indexes(options = GetAllIndexesOptions.new)
|
51
|
+
res = @backend.search_index_get_all(@bucket_name, @scope_name, options.timeout)
|
52
|
+
res[:indexes].map { |idx| SearchIndexManager.extract_search_index(idx) }
|
53
|
+
end
|
54
|
+
|
55
|
+
# Creates or updates the index
|
56
|
+
#
|
57
|
+
# @param [SearchIndex] index_definition the index definition
|
58
|
+
# @param [UpsertIndexOptions] options
|
59
|
+
#
|
60
|
+
# @return void
|
61
|
+
#
|
62
|
+
# @raise [ArgumentError] if name, type or source_type is empty
|
63
|
+
def upsert_index(index_definition, options = UpsertIndexOptions.new)
|
64
|
+
@backend.search_index_upsert(@bucket_name, @scope_name, index_definition.to_backend, options.timeout)
|
65
|
+
end
|
66
|
+
|
67
|
+
# Drops the index
|
68
|
+
#
|
69
|
+
# @param [String] index_name name of the index
|
70
|
+
# @param [DropIndexOptions] options
|
71
|
+
#
|
72
|
+
# @return void
|
73
|
+
#
|
74
|
+
# @raise [ArgumentError]
|
75
|
+
# @raise [Error::IndexNotFound]
|
76
|
+
def drop_index(index_name, options = DropIndexOptions.new)
|
77
|
+
@backend.search_index_drop(@bucket_name, @scope_name, index_name, options.timeout)
|
78
|
+
end
|
79
|
+
|
80
|
+
# Retrieves the number of documents that have been indexed for an index
|
81
|
+
#
|
82
|
+
# @param [String] index_name name of the index
|
83
|
+
# @param [GetIndexedDocumentsCountOptions] options
|
84
|
+
#
|
85
|
+
# @return [Integer]
|
86
|
+
#
|
87
|
+
# @raise [ArgumentError]
|
88
|
+
# @raise [Error::IndexNotFound]
|
89
|
+
def get_indexed_documents_count(index_name, options = GetIndexedDocumentsCountOptions.new)
|
90
|
+
res = @backend.search_index_get_documents_count(@bucket_name, @scope_name, index_name, options.timeout)
|
91
|
+
res[:count]
|
92
|
+
end
|
93
|
+
|
94
|
+
# Pauses updates and maintenance for the index
|
95
|
+
#
|
96
|
+
# @param [String] index_name name of the index
|
97
|
+
# @param [PauseIngestOptions] options
|
98
|
+
#
|
99
|
+
# @return void
|
100
|
+
#
|
101
|
+
# @raise [ArgumentError]
|
102
|
+
# @raise [Error::IndexNotFound]
|
103
|
+
def pause_ingest(index_name, options = PauseIngestOptions.new)
|
104
|
+
@backend.search_index_pause_ingest(@bucket_name, @scope_name, index_name, options.timeout)
|
105
|
+
end
|
106
|
+
|
107
|
+
# Resumes updates and maintenance for an index
|
108
|
+
#
|
109
|
+
# @param [String] index_name name of the index
|
110
|
+
# @param [ResumeIngestOptions] options
|
111
|
+
#
|
112
|
+
# @return void
|
113
|
+
#
|
114
|
+
# @raise [ArgumentError]
|
115
|
+
# @raise [Error::IndexNotFound]
|
116
|
+
def resume_ingest(index_name, options = ResumeIngestOptions.new)
|
117
|
+
@backend.search_index_resume_ingest(@bucket_name, @scope_name, index_name, options.timeout)
|
118
|
+
end
|
119
|
+
|
120
|
+
# Allows querying against the index
|
121
|
+
#
|
122
|
+
# @param [String] index_name name of the index
|
123
|
+
# @param [AllowQueryingOptions] options
|
124
|
+
#
|
125
|
+
# @return void
|
126
|
+
#
|
127
|
+
# @raise [ArgumentError]
|
128
|
+
# @raise [Error::IndexNotFound]
|
129
|
+
def allow_querying(index_name, options = AllowQueryingOptions.new)
|
130
|
+
@backend.search_index_allow_querying(@bucket_name, @scope_name, index_name, options.timeout)
|
131
|
+
end
|
132
|
+
|
133
|
+
# Disallows querying against the index
|
134
|
+
#
|
135
|
+
# @param [String] index_name name of the index
|
136
|
+
# @param [DisallowQueryingOptions] options
|
137
|
+
#
|
138
|
+
# @return void
|
139
|
+
#
|
140
|
+
# @raise [ArgumentError]
|
141
|
+
# @raise [Error::IndexNotFound]
|
142
|
+
def disallow_querying(index_name, options = DisallowQueryingOptions.new)
|
143
|
+
@backend.search_index_disallow_querying(@bucket_name, @scope_name, index_name, options.timeout)
|
144
|
+
end
|
145
|
+
|
146
|
+
# Freeze the assignment of index partitions to nodes
|
147
|
+
#
|
148
|
+
# @param [String] index_name name of the index
|
149
|
+
# @param [FreezePlanOptions] options
|
150
|
+
#
|
151
|
+
# @return void
|
152
|
+
#
|
153
|
+
# @raise [ArgumentError]
|
154
|
+
# @raise [Error::IndexNotFound]
|
155
|
+
def freeze_plan(index_name, options = FreezePlanOptions.new)
|
156
|
+
@backend.search_index_freeze_plan(@bucket_name, @scope_name, index_name, options.timeout)
|
157
|
+
end
|
158
|
+
|
159
|
+
# Unfreeze the assignment of index partitions to nodes
|
160
|
+
#
|
161
|
+
# @param [String] index_name name of the index
|
162
|
+
# @param [UnfreezePlanOptions] options
|
163
|
+
#
|
164
|
+
# @return void
|
165
|
+
#
|
166
|
+
# @raise [ArgumentError]
|
167
|
+
# @raise [Error::IndexNotFound]
|
168
|
+
def unfreeze_plan(index_name, options = UnfreezePlanOptions.new)
|
169
|
+
@backend.search_index_unfreeze_plan(@bucket_name, @scope_name, index_name, options.timeout)
|
170
|
+
end
|
171
|
+
|
172
|
+
# Allows to see how a document is analyzed against a specific index
|
173
|
+
#
|
174
|
+
# @param [String] index_name name of the index
|
175
|
+
# @param [Hash] document the document to be analyzed
|
176
|
+
#
|
177
|
+
# @return [Array<Hash>]
|
178
|
+
#
|
179
|
+
# @raise [ArgumentError]
|
180
|
+
# @raise [Error::IndexNotFound]
|
181
|
+
def analyze_document(index_name, document, options = AnalyzeDocumentOptions.new)
|
182
|
+
res = @backend.search_index_analyze_document(@bucket_name, @scope_name, index_name, JSON.generate(document), options.timeout)
|
183
|
+
JSON.parse(res[:analysis])
|
184
|
+
end
|
185
|
+
|
186
|
+
GetIndexOptions = SearchIndexManager::GetIndexOptions
|
187
|
+
GetAllIndexesOptions = SearchIndexManager::GetAllIndexesOptions
|
188
|
+
UpsertIndexOptions = SearchIndexManager::UpsertIndexOptions
|
189
|
+
DropIndexOptions = SearchIndexManager::DropIndexOptions
|
190
|
+
GetIndexedDocumentsCountOptions = SearchIndexManager::GetIndexedDocumentsCountOptions
|
191
|
+
PauseIngestOptions = SearchIndexManager::PauseIngestOptions
|
192
|
+
ResumeIngestOptions = SearchIndexManager::ResumeIngestOptions
|
193
|
+
AllowQueryingOptions = SearchIndexManager::AllowQueryingOptions
|
194
|
+
DisallowQueryingOptions = SearchIndexManager::DisallowQueryingOptions
|
195
|
+
FreezePlanOptions = SearchIndexManager::FreezePlanOptions
|
196
|
+
UnfreezePlanOptions = SearchIndexManager::UnfreezePlanOptions
|
197
|
+
AnalyzeDocumentOptions = SearchIndexManager::AnalyzeDocumentOptions
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
@@ -0,0 +1,426 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2020-2021 Couchbase, Inc.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may 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, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
require "couchbase/errors"
|
18
|
+
|
19
|
+
module Couchbase
|
20
|
+
module Management
|
21
|
+
class SearchIndexManager
|
22
|
+
alias inspect to_s
|
23
|
+
|
24
|
+
# @param [Couchbase::Backend] backend
|
25
|
+
def initialize(backend)
|
26
|
+
@backend = backend
|
27
|
+
end
|
28
|
+
|
29
|
+
# Fetches an index from the server if it exists
|
30
|
+
#
|
31
|
+
# @param [String] index_name name of the index
|
32
|
+
# @param [GetIndexOptions] options
|
33
|
+
#
|
34
|
+
# @return [SearchIndex]
|
35
|
+
#
|
36
|
+
# @raise [ArgumentError]
|
37
|
+
# @raise [Error::IndexNotFound]
|
38
|
+
def get_index(index_name, options = GetIndexOptions.new)
|
39
|
+
res = @backend.search_index_get(nil, nil, index_name, options.timeout)
|
40
|
+
self.class.extract_search_index(res)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Fetches all indexes from the server
|
44
|
+
#
|
45
|
+
# @param [GetAllIndexesOptions] options
|
46
|
+
#
|
47
|
+
# @return [Array<SearchIndex>]
|
48
|
+
def get_all_indexes(options = GetAllIndexesOptions.new)
|
49
|
+
res = @backend.search_index_get_all(nil, nil, options.timeout)
|
50
|
+
res[:indexes].map { |idx| self.class.extract_search_index(idx) }
|
51
|
+
end
|
52
|
+
|
53
|
+
# Creates or updates the index
|
54
|
+
#
|
55
|
+
# @param [SearchIndex] index_definition the index definition
|
56
|
+
# @param [UpsertIndexOptions] options
|
57
|
+
#
|
58
|
+
# @return void
|
59
|
+
#
|
60
|
+
# @raise [ArgumentError] if name, type or source_type is empty
|
61
|
+
def upsert_index(index_definition, options = UpsertIndexOptions.new)
|
62
|
+
@backend.search_index_upsert(
|
63
|
+
nil,
|
64
|
+
nil,
|
65
|
+
{
|
66
|
+
name: index_definition.name,
|
67
|
+
type: index_definition.type,
|
68
|
+
uuid: index_definition.uuid,
|
69
|
+
params: (JSON.generate(index_definition.params) if index_definition.params),
|
70
|
+
source_name: index_definition.source_name,
|
71
|
+
source_type: index_definition.source_type,
|
72
|
+
source_uuid: index_definition.source_uuid,
|
73
|
+
source_params: (JSON.generate(index_definition.source_params) if index_definition.source_params),
|
74
|
+
plan_params: (JSON.generate(index_definition.plan_params) if index_definition.plan_params),
|
75
|
+
}, options.timeout
|
76
|
+
)
|
77
|
+
end
|
78
|
+
|
79
|
+
# Drops the index
|
80
|
+
#
|
81
|
+
# @param [String] index_name name of the index
|
82
|
+
# @param [DropIndexOptions] options
|
83
|
+
#
|
84
|
+
# @return void
|
85
|
+
#
|
86
|
+
# @raise [ArgumentError]
|
87
|
+
# @raise [Error::IndexNotFound]
|
88
|
+
def drop_index(index_name, options = DropIndexOptions.new)
|
89
|
+
@backend.search_index_drop(nil, nil, index_name, options.timeout)
|
90
|
+
end
|
91
|
+
|
92
|
+
# Retrieves the number of documents that have been indexed for an index
|
93
|
+
#
|
94
|
+
# @param [String] index_name name of the index
|
95
|
+
# @param [GetIndexedDocumentsCountOptions] options
|
96
|
+
#
|
97
|
+
# @return [Integer]
|
98
|
+
#
|
99
|
+
# @raise [ArgumentError]
|
100
|
+
# @raise [Error::IndexNotFound]
|
101
|
+
def get_indexed_documents_count(index_name, options = GetIndexedDocumentsCountOptions.new)
|
102
|
+
res = @backend.search_index_get_documents_count(nil, nil, index_name, options.timeout)
|
103
|
+
res[:count]
|
104
|
+
end
|
105
|
+
|
106
|
+
# Retrieves metrics, timings and counters for a given index
|
107
|
+
#
|
108
|
+
# @!macro uncommitted
|
109
|
+
#
|
110
|
+
# @param [String] index_name name of the index
|
111
|
+
# @param [GetIndexStatsOptions] options
|
112
|
+
#
|
113
|
+
# @return [Integer]
|
114
|
+
#
|
115
|
+
# @raise [ArgumentError]
|
116
|
+
# @raise [Error::IndexNotFound]
|
117
|
+
def get_index_stats(index_name, options = GetIndexStatsOptions.new)
|
118
|
+
res = @backend.search_index_get_stats(index_name, options.timeout)
|
119
|
+
JSON.parse(res)
|
120
|
+
end
|
121
|
+
|
122
|
+
# Retrieves statistics on search service. Information is provided on documents, partition indexes, mutations,
|
123
|
+
# compactions, queries, and more.
|
124
|
+
#
|
125
|
+
# @!macro uncommitted
|
126
|
+
#
|
127
|
+
# @param [GetIndexStatsOptions] options
|
128
|
+
#
|
129
|
+
# @return [Integer]
|
130
|
+
#
|
131
|
+
# @raise [ArgumentError]
|
132
|
+
def get_stats(options = GetIndexStatsOptions.new)
|
133
|
+
res = @backend.search_get_stats(options.timeout)
|
134
|
+
JSON.parse(res)
|
135
|
+
end
|
136
|
+
|
137
|
+
# Pauses updates and maintenance for the index
|
138
|
+
#
|
139
|
+
# @param [String] index_name name of the index
|
140
|
+
# @param [PauseIngestOptions] options
|
141
|
+
#
|
142
|
+
# @return void
|
143
|
+
#
|
144
|
+
# @raise [ArgumentError]
|
145
|
+
# @raise [Error::IndexNotFound]
|
146
|
+
def pause_ingest(index_name, options = PauseIngestOptions.new)
|
147
|
+
@backend.search_index_pause_ingest(nil, nil, index_name, options.timeout)
|
148
|
+
end
|
149
|
+
|
150
|
+
# Resumes updates and maintenance for an index
|
151
|
+
#
|
152
|
+
# @param [String] index_name name of the index
|
153
|
+
# @param [ResumeIngestOptions] options
|
154
|
+
#
|
155
|
+
# @return void
|
156
|
+
#
|
157
|
+
# @raise [ArgumentError]
|
158
|
+
# @raise [Error::IndexNotFound]
|
159
|
+
def resume_ingest(index_name, options = ResumeIngestOptions.new)
|
160
|
+
@backend.search_index_resume_ingest(nil, nil, index_name, options.timeout)
|
161
|
+
end
|
162
|
+
|
163
|
+
# Allows querying against the index
|
164
|
+
#
|
165
|
+
# @param [String] index_name name of the index
|
166
|
+
# @param [AllowQueryingOptions] options
|
167
|
+
#
|
168
|
+
# @return void
|
169
|
+
#
|
170
|
+
# @raise [ArgumentError]
|
171
|
+
# @raise [Error::IndexNotFound]
|
172
|
+
def allow_querying(index_name, options = AllowQueryingOptions.new)
|
173
|
+
@backend.search_index_allow_querying(nil, nil, index_name, options.timeout)
|
174
|
+
end
|
175
|
+
|
176
|
+
# Disallows querying against the index
|
177
|
+
#
|
178
|
+
# @param [String] index_name name of the index
|
179
|
+
# @param [DisallowQueryingOptions] options
|
180
|
+
#
|
181
|
+
# @return void
|
182
|
+
#
|
183
|
+
# @raise [ArgumentError]
|
184
|
+
# @raise [Error::IndexNotFound]
|
185
|
+
def disallow_querying(index_name, options = DisallowQueryingOptions.new)
|
186
|
+
@backend.search_index_disallow_querying(nil, nil, index_name, options.timeout)
|
187
|
+
end
|
188
|
+
|
189
|
+
# Freeze the assignment of index partitions to nodes
|
190
|
+
#
|
191
|
+
# @param [String] index_name name of the index
|
192
|
+
# @param [FreezePlanOptions] options
|
193
|
+
#
|
194
|
+
# @return void
|
195
|
+
#
|
196
|
+
# @raise [ArgumentError]
|
197
|
+
# @raise [Error::IndexNotFound]
|
198
|
+
def freeze_plan(index_name, options = FreezePlanOptions.new)
|
199
|
+
@backend.search_index_freeze_plan(nil, nil, index_name, options.timeout)
|
200
|
+
end
|
201
|
+
|
202
|
+
# Unfreeze the assignment of index partitions to nodes
|
203
|
+
#
|
204
|
+
# @param [String] index_name name of the index
|
205
|
+
# @param [UnfreezePlanOptions] options
|
206
|
+
#
|
207
|
+
# @return void
|
208
|
+
#
|
209
|
+
# @raise [ArgumentError]
|
210
|
+
# @raise [Error::IndexNotFound]
|
211
|
+
def unfreeze_plan(index_name, options = UnfreezePlanOptions.new)
|
212
|
+
@backend.search_index_unfreeze_plan(nil, nil, index_name, options.timeout)
|
213
|
+
end
|
214
|
+
|
215
|
+
# Allows to see how a document is analyzed against a specific index
|
216
|
+
#
|
217
|
+
# @param [String] index_name name of the index
|
218
|
+
# @param [Hash] document the document to be analyzed
|
219
|
+
#
|
220
|
+
# @return [Array<Hash>]
|
221
|
+
#
|
222
|
+
# @raise [ArgumentError]
|
223
|
+
# @raise [Error::IndexNotFound]
|
224
|
+
def analyze_document(index_name, document, options = AnalyzeDocumentOptions.new)
|
225
|
+
res = @backend.search_index_analyze_document(nil, nil, index_name, JSON.generate(document), options.timeout)
|
226
|
+
JSON.parse(res[:analysis])
|
227
|
+
end
|
228
|
+
|
229
|
+
class GetIndexOptions
|
230
|
+
# @return [Integer] the time in milliseconds allowed for the operation to complete
|
231
|
+
attr_accessor :timeout
|
232
|
+
|
233
|
+
# @yieldparam [GetIndexOptions] self
|
234
|
+
def initialize
|
235
|
+
yield self if block_given?
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
class GetAllIndexesOptions
|
240
|
+
# @return [Integer] the time in milliseconds allowed for the operation to complete
|
241
|
+
attr_accessor :timeout
|
242
|
+
|
243
|
+
# @yieldparam [GetAllIndexesOptions] self
|
244
|
+
def initialize
|
245
|
+
yield self if block_given?
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
class UpsertIndexOptions
|
250
|
+
# @return [Integer] the time in milliseconds allowed for the operation to complete
|
251
|
+
attr_accessor :timeout
|
252
|
+
|
253
|
+
# @yieldparam [UpsertIndexOptions] self
|
254
|
+
def initialize
|
255
|
+
yield self if block_given?
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
class DropIndexOptions
|
260
|
+
# @return [Integer] the time in milliseconds allowed for the operation to complete
|
261
|
+
attr_accessor :timeout
|
262
|
+
|
263
|
+
# @yieldparam [DropIndexOptions] self
|
264
|
+
def initialize
|
265
|
+
yield self if block_given?
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
class GetIndexedDocumentsCountOptions
|
270
|
+
# @return [Integer] the time in milliseconds allowed for the operation to complete
|
271
|
+
attr_accessor :timeout
|
272
|
+
|
273
|
+
# @yieldparam [GetIndexedDocumentCountOptions] self
|
274
|
+
def initialize
|
275
|
+
yield self if block_given?
|
276
|
+
end
|
277
|
+
end
|
278
|
+
|
279
|
+
class GetIndexStatsOptions
|
280
|
+
# @return [Integer] the time in milliseconds allowed for the operation to complete
|
281
|
+
attr_accessor :timeout
|
282
|
+
|
283
|
+
# @yieldparam [GetStatsOptions] self
|
284
|
+
def initialize
|
285
|
+
yield self if block_given?
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
289
|
+
class PauseIngestOptions
|
290
|
+
# @return [Integer] the time in milliseconds allowed for the operation to complete
|
291
|
+
attr_accessor :timeout
|
292
|
+
|
293
|
+
# @yieldparam [PauseIngestOptions] self
|
294
|
+
def initialize
|
295
|
+
yield self if block_given?
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
class ResumeIngestOptions
|
300
|
+
# @return [Integer] the time in milliseconds allowed for the operation to complete
|
301
|
+
attr_accessor :timeout
|
302
|
+
|
303
|
+
# @yieldparam [ResumeIngestOptions] self
|
304
|
+
def initialize
|
305
|
+
yield self if block_given?
|
306
|
+
end
|
307
|
+
end
|
308
|
+
|
309
|
+
class AllowQueryingOptions
|
310
|
+
# @return [Integer] the time in milliseconds allowed for the operation to complete
|
311
|
+
attr_accessor :timeout
|
312
|
+
|
313
|
+
# @yieldparam [AllowQueryingOptions] self
|
314
|
+
def initialize
|
315
|
+
yield self if block_given?
|
316
|
+
end
|
317
|
+
end
|
318
|
+
|
319
|
+
class DisallowQueryingOptions
|
320
|
+
# @return [Integer] the time in milliseconds allowed for the operation to complete
|
321
|
+
attr_accessor :timeout
|
322
|
+
|
323
|
+
# @yieldparam [DisallowQueryingOptions] self
|
324
|
+
def initialize
|
325
|
+
yield self if block_given?
|
326
|
+
end
|
327
|
+
end
|
328
|
+
|
329
|
+
class FreezePlanOptions
|
330
|
+
# @return [Integer] the time in milliseconds allowed for the operation to complete
|
331
|
+
attr_accessor :timeout
|
332
|
+
|
333
|
+
# @yieldparam [FreezePlanOptions] self
|
334
|
+
def initialize
|
335
|
+
yield self if block_given?
|
336
|
+
end
|
337
|
+
end
|
338
|
+
|
339
|
+
class UnfreezePlanOptions
|
340
|
+
# @return [Integer] the time in milliseconds allowed for the operation to complete
|
341
|
+
attr_accessor :timeout
|
342
|
+
|
343
|
+
# @yieldparam [UnfreezePlanOptions] self
|
344
|
+
def initialize
|
345
|
+
yield self if block_given?
|
346
|
+
end
|
347
|
+
end
|
348
|
+
|
349
|
+
class AnalyzeDocumentOptions
|
350
|
+
# @return [Integer] the time in milliseconds allowed for the operation to complete
|
351
|
+
attr_accessor :timeout
|
352
|
+
|
353
|
+
# @yieldparam [AnalyzeDocumentOptions] self
|
354
|
+
def initialize
|
355
|
+
yield self if block_given?
|
356
|
+
end
|
357
|
+
end
|
358
|
+
|
359
|
+
# @api private
|
360
|
+
def self.extract_search_index(resp)
|
361
|
+
SearchIndex.new do |index|
|
362
|
+
index.name = resp[:name]
|
363
|
+
index.type = resp[:type]
|
364
|
+
index.uuid = resp[:uuid]
|
365
|
+
index.params = resp[:params] ? JSON.parse(resp[:params]) : {}
|
366
|
+
index.source_name = resp[:source_name]
|
367
|
+
index.source_type = resp[:source_type]
|
368
|
+
index.source_uuid = resp[:source_uuid]
|
369
|
+
index.source_params = resp[:source_params] ? JSON.parse(resp[:source_params]) : {}
|
370
|
+
index.plan_params = resp[:plan_params] ? JSON.parse(resp[:plan_params]) : {}
|
371
|
+
end
|
372
|
+
end
|
373
|
+
end
|
374
|
+
|
375
|
+
class SearchIndex
|
376
|
+
# @return [String] name of the index
|
377
|
+
attr_accessor :name
|
378
|
+
|
379
|
+
# @return [String] type of the index
|
380
|
+
attr_accessor :type
|
381
|
+
|
382
|
+
# @return [String] UUID is required for update. It provides means of ensuring consistency.
|
383
|
+
attr_accessor :uuid
|
384
|
+
|
385
|
+
# @return [Hash] index properties such as store type and mappings
|
386
|
+
attr_accessor :params
|
387
|
+
|
388
|
+
# @return [String] name of the source of the data for the index (e.g. bucket name)
|
389
|
+
attr_accessor :source_name
|
390
|
+
|
391
|
+
# @return [String] type of the data source
|
392
|
+
attr_accessor :source_type
|
393
|
+
|
394
|
+
# @return [String] the UUID of the ata source, this can be used to more tightly tie the index to a source
|
395
|
+
attr_accessor :source_uuid
|
396
|
+
|
397
|
+
# @return [Hash] extra parameters for the source. These are usually things like advanced connection and tuning.
|
398
|
+
attr_accessor :source_params
|
399
|
+
|
400
|
+
# @return [Hash] plan properties such a number of replicas and number of partitions
|
401
|
+
attr_accessor :plan_params
|
402
|
+
|
403
|
+
# @yieldparam [SearchIndex] self
|
404
|
+
def initialize
|
405
|
+
@type = "fulltext-index"
|
406
|
+
@source_type = "couchbase"
|
407
|
+
yield self if block_given?
|
408
|
+
end
|
409
|
+
|
410
|
+
# @api private
|
411
|
+
def to_backend
|
412
|
+
{
|
413
|
+
name: name,
|
414
|
+
type: type,
|
415
|
+
uuid: uuid,
|
416
|
+
params: (JSON.generate(params) if params),
|
417
|
+
source_name: source_name,
|
418
|
+
source_type: source_type,
|
419
|
+
source_uuid: source_uuid,
|
420
|
+
source_params: (JSON.generate(source_params) if source_params),
|
421
|
+
plan_params: (JSON.generate(plan_params) if plan_params),
|
422
|
+
}
|
423
|
+
end
|
424
|
+
end
|
425
|
+
end
|
426
|
+
end
|