@azure/search-documents 11.3.0-beta.5 → 11.3.0-beta.8
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.
- package/README.md +71 -55
- package/dist/index.js +1178 -601
- package/dist/index.js.map +1 -1
- package/dist-esm/src/constants.js +1 -1
- package/dist-esm/src/constants.js.map +1 -1
- package/dist-esm/src/generated/data/index.js +0 -1
- package/dist-esm/src/generated/data/index.js.map +1 -1
- package/dist-esm/src/generated/data/models/index.js +2 -2
- package/dist-esm/src/generated/data/models/index.js.map +1 -1
- package/dist-esm/src/generated/data/operations/documents.js.map +1 -1
- package/dist-esm/src/generated/data/searchClient.js +31 -3
- package/dist-esm/src/generated/data/searchClient.js.map +1 -1
- package/dist-esm/src/generated/data/searchClientContext.js +1 -1
- package/dist-esm/src/generated/data/searchClientContext.js.map +1 -1
- package/dist-esm/src/generated/service/index.js +0 -1
- package/dist-esm/src/generated/service/index.js.map +1 -1
- package/dist-esm/src/generated/service/models/index.js +2 -0
- package/dist-esm/src/generated/service/models/index.js.map +1 -1
- package/dist-esm/src/generated/service/models/mappers.js +109 -0
- package/dist-esm/src/generated/service/models/mappers.js.map +1 -1
- package/dist-esm/src/generated/service/models/parameters.js +15 -1
- package/dist-esm/src/generated/service/models/parameters.js.map +1 -1
- package/dist-esm/src/generated/service/operations/aliases.js +166 -0
- package/dist-esm/src/generated/service/operations/aliases.js.map +1 -0
- package/dist-esm/src/generated/service/operations/dataSources.js.map +1 -1
- package/dist-esm/src/generated/service/operations/index.js +1 -0
- package/dist-esm/src/generated/service/operations/index.js.map +1 -1
- package/dist-esm/src/generated/service/operations/indexers.js.map +1 -1
- package/dist-esm/src/generated/service/operations/indexes.js.map +1 -1
- package/dist-esm/src/generated/service/operations/skillsets.js.map +1 -1
- package/dist-esm/src/generated/service/operations/synonymMaps.js.map +1 -1
- package/dist-esm/src/generated/service/operationsInterfaces/aliases.js +9 -0
- package/dist-esm/src/generated/service/operationsInterfaces/aliases.js.map +1 -0
- package/dist-esm/src/generated/service/operationsInterfaces/index.js +1 -0
- package/dist-esm/src/generated/service/operationsInterfaces/index.js.map +1 -1
- package/dist-esm/src/generated/service/searchServiceClient.js +29 -4
- package/dist-esm/src/generated/service/searchServiceClient.js.map +1 -1
- package/dist-esm/src/generated/service/searchServiceClientContext.js +1 -1
- package/dist-esm/src/generated/service/searchServiceClientContext.js.map +1 -1
- package/dist-esm/src/geographyPoint.js +1 -1
- package/dist-esm/src/geographyPoint.js.map +1 -1
- package/dist-esm/src/index.js +5 -4
- package/dist-esm/src/index.js.map +1 -1
- package/dist-esm/src/indexDocumentsBatch.js +1 -1
- package/dist-esm/src/indexDocumentsBatch.js.map +1 -1
- package/dist-esm/src/indexModels.js.map +1 -1
- package/dist-esm/src/odataMetadataPolicy.js +1 -1
- package/dist-esm/src/odataMetadataPolicy.js.map +1 -1
- package/dist-esm/src/searchApiKeyCredentialPolicy.js +1 -1
- package/dist-esm/src/searchApiKeyCredentialPolicy.js.map +1 -1
- package/dist-esm/src/searchAudience.js +21 -0
- package/dist-esm/src/searchAudience.js.map +1 -0
- package/dist-esm/src/searchClient.js +55 -40
- package/dist-esm/src/searchClient.js.map +1 -1
- package/dist-esm/src/searchIndexClient.js +206 -45
- package/dist-esm/src/searchIndexClient.js.map +1 -1
- package/dist-esm/src/searchIndexerClient.js +72 -57
- package/dist-esm/src/searchIndexerClient.js.map +1 -1
- package/dist-esm/src/searchIndexingBufferedSender.js +15 -16
- package/dist-esm/src/searchIndexingBufferedSender.js.map +1 -1
- package/dist-esm/src/serialization.js +5 -5
- package/dist-esm/src/serialization.js.map +1 -1
- package/dist-esm/src/serviceModels.js.map +1 -1
- package/dist-esm/src/serviceUtils.js +23 -19
- package/dist-esm/src/serviceUtils.js.map +1 -1
- package/dist-esm/src/synonymMapHelper.js +1 -1
- package/dist-esm/src/synonymMapHelper.js.map +1 -1
- package/dist-esm/src/tracing.js +6 -5
- package/dist-esm/src/tracing.js.map +1 -1
- package/package.json +22 -33
- package/types/search-documents.d.ts +195 -17
- package/CHANGELOG.md +0 -188
|
@@ -8,12 +8,12 @@ import { createSearchApiKeyCredentialPolicy } from "./searchApiKeyCredentialPoli
|
|
|
8
8
|
import { SDK_VERSION } from "./constants";
|
|
9
9
|
import { logger } from "./logger";
|
|
10
10
|
import { createSpan } from "./tracing";
|
|
11
|
-
import { SpanStatusCode } from "@azure/core-tracing";
|
|
12
11
|
import { deserialize, serialize } from "./serialization";
|
|
13
12
|
import { createOdataMetadataPolicy } from "./odataMetadataPolicy";
|
|
14
13
|
import { IndexDocumentsBatch } from "./indexDocumentsBatch";
|
|
15
14
|
import { encode, decode } from "./base64";
|
|
16
15
|
import * as utils from "./serviceUtils";
|
|
16
|
+
import { KnownSearchAudience } from "./searchAudience";
|
|
17
17
|
/**
|
|
18
18
|
* Class used to perform operations against a search index,
|
|
19
19
|
* including querying documents in the index as well as
|
|
@@ -41,10 +41,15 @@ export class SearchClient {
|
|
|
41
41
|
constructor(endpoint, indexName, credential, options = {}) {
|
|
42
42
|
/// Maintenance note: when updating supported API versions,
|
|
43
43
|
/// the ContinuationToken logic will need to be updated below.
|
|
44
|
+
/**
|
|
45
|
+
* The service version to use when communicating with the service.
|
|
46
|
+
*/
|
|
47
|
+
this.serviceVersion = utils.defaultServiceVersion;
|
|
44
48
|
/**
|
|
45
49
|
* The API version to use when communicating with the service.
|
|
50
|
+
* @deprecated use {@Link serviceVersion} instead
|
|
46
51
|
*/
|
|
47
|
-
this.apiVersion =
|
|
52
|
+
this.apiVersion = utils.defaultServiceVersion;
|
|
48
53
|
this.endpoint = endpoint;
|
|
49
54
|
this.indexName = indexName;
|
|
50
55
|
const libInfo = `azsdk-js-search-documents/${SDK_VERSION}`;
|
|
@@ -66,20 +71,30 @@ export class SearchClient {
|
|
|
66
71
|
"OData-MaxVersion",
|
|
67
72
|
"OData-Version",
|
|
68
73
|
"Prefer",
|
|
69
|
-
"throttle-reason"
|
|
70
|
-
]
|
|
71
|
-
}
|
|
74
|
+
"throttle-reason",
|
|
75
|
+
],
|
|
76
|
+
},
|
|
72
77
|
});
|
|
73
|
-
let apiVersion = this.apiVersion;
|
|
74
78
|
if (options.apiVersion) {
|
|
75
|
-
if (!
|
|
79
|
+
if (!utils.serviceVersions.includes(options.apiVersion)) {
|
|
76
80
|
throw new Error(`Invalid Api Version: ${options.apiVersion}`);
|
|
77
81
|
}
|
|
78
|
-
|
|
82
|
+
this.serviceVersion = options.apiVersion;
|
|
83
|
+
this.apiVersion = options.apiVersion;
|
|
79
84
|
}
|
|
80
|
-
|
|
85
|
+
if (options.serviceVersion) {
|
|
86
|
+
if (!utils.serviceVersions.includes(options.serviceVersion)) {
|
|
87
|
+
throw new Error(`Invalid Service Version: ${options.serviceVersion}`);
|
|
88
|
+
}
|
|
89
|
+
this.serviceVersion = options.serviceVersion;
|
|
90
|
+
this.apiVersion = options.serviceVersion;
|
|
91
|
+
}
|
|
92
|
+
this.client = new GeneratedClient(this.endpoint, this.indexName, this.serviceVersion, internalClientPipelineOptions);
|
|
81
93
|
if (isTokenCredential(credential)) {
|
|
82
|
-
|
|
94
|
+
const scope = options.audience
|
|
95
|
+
? `${options.audience}/.default`
|
|
96
|
+
: `${KnownSearchAudience.AzurePublicCloud}/.default`;
|
|
97
|
+
this.client.pipeline.addPolicy(bearerTokenAuthenticationPolicy({ credential, scopes: scope }));
|
|
83
98
|
}
|
|
84
99
|
else {
|
|
85
100
|
this.client.pipeline.addPolicy(createSearchApiKeyCredentialPolicy(credential));
|
|
@@ -101,8 +116,8 @@ export class SearchClient {
|
|
|
101
116
|
}
|
|
102
117
|
catch (e) {
|
|
103
118
|
span.setStatus({
|
|
104
|
-
|
|
105
|
-
|
|
119
|
+
status: "error",
|
|
120
|
+
error: e.message,
|
|
106
121
|
});
|
|
107
122
|
throw e;
|
|
108
123
|
}
|
|
@@ -134,8 +149,8 @@ export class SearchClient {
|
|
|
134
149
|
}
|
|
135
150
|
catch (e) {
|
|
136
151
|
span.setStatus({
|
|
137
|
-
|
|
138
|
-
|
|
152
|
+
status: "error",
|
|
153
|
+
error: e.message,
|
|
139
154
|
});
|
|
140
155
|
throw e;
|
|
141
156
|
}
|
|
@@ -158,14 +173,14 @@ export class SearchClient {
|
|
|
158
173
|
coverage,
|
|
159
174
|
facets,
|
|
160
175
|
answers,
|
|
161
|
-
continuationToken: this.encodeContinuationToken(nextLink, result.nextPageParameters)
|
|
176
|
+
continuationToken: this.encodeContinuationToken(nextLink, result.nextPageParameters),
|
|
162
177
|
};
|
|
163
178
|
return deserialize(converted);
|
|
164
179
|
}
|
|
165
180
|
catch (e) {
|
|
166
181
|
span.setStatus({
|
|
167
|
-
|
|
168
|
-
|
|
182
|
+
status: "error",
|
|
183
|
+
error: e.message,
|
|
169
184
|
});
|
|
170
185
|
throw e;
|
|
171
186
|
}
|
|
@@ -194,7 +209,7 @@ export class SearchClient {
|
|
|
194
209
|
if (firstPage.continuationToken) {
|
|
195
210
|
try {
|
|
196
211
|
for (var _b = __asyncValues(this.listSearchResultsPage(searchText, options, {
|
|
197
|
-
continuationToken: firstPage.continuationToken
|
|
212
|
+
continuationToken: firstPage.continuationToken,
|
|
198
213
|
})), _c; _c = yield __await(_b.next()), !_c.done;) {
|
|
199
214
|
const page = _c.value;
|
|
200
215
|
yield __await(yield* __asyncDelegator(__asyncValues(page.results)));
|
|
@@ -221,7 +236,7 @@ export class SearchClient {
|
|
|
221
236
|
},
|
|
222
237
|
byPage: (settings = {}) => {
|
|
223
238
|
return this.listSearchResultsPage(searchText, options, settings);
|
|
224
|
-
}
|
|
239
|
+
},
|
|
225
240
|
};
|
|
226
241
|
}
|
|
227
242
|
/**
|
|
@@ -240,13 +255,13 @@ export class SearchClient {
|
|
|
240
255
|
coverage,
|
|
241
256
|
facets,
|
|
242
257
|
answers,
|
|
243
|
-
results: this.listSearchResults(pageResult, searchText, updatedOptions)
|
|
258
|
+
results: this.listSearchResults(pageResult, searchText, updatedOptions),
|
|
244
259
|
};
|
|
245
260
|
}
|
|
246
261
|
catch (e) {
|
|
247
262
|
span.setStatus({
|
|
248
|
-
|
|
249
|
-
|
|
263
|
+
status: "error",
|
|
264
|
+
error: e.message,
|
|
250
265
|
});
|
|
251
266
|
throw e;
|
|
252
267
|
}
|
|
@@ -279,8 +294,8 @@ export class SearchClient {
|
|
|
279
294
|
}
|
|
280
295
|
catch (e) {
|
|
281
296
|
span.setStatus({
|
|
282
|
-
|
|
283
|
-
|
|
297
|
+
status: "error",
|
|
298
|
+
error: e.message,
|
|
284
299
|
});
|
|
285
300
|
throw e;
|
|
286
301
|
}
|
|
@@ -301,8 +316,8 @@ export class SearchClient {
|
|
|
301
316
|
}
|
|
302
317
|
catch (e) {
|
|
303
318
|
span.setStatus({
|
|
304
|
-
|
|
305
|
-
|
|
319
|
+
status: "error",
|
|
320
|
+
error: e.message,
|
|
306
321
|
});
|
|
307
322
|
throw e;
|
|
308
323
|
}
|
|
@@ -336,8 +351,8 @@ export class SearchClient {
|
|
|
336
351
|
}
|
|
337
352
|
catch (e) {
|
|
338
353
|
span.setStatus({
|
|
339
|
-
|
|
340
|
-
|
|
354
|
+
status: "error",
|
|
355
|
+
error: e.message,
|
|
341
356
|
});
|
|
342
357
|
throw e;
|
|
343
358
|
}
|
|
@@ -359,8 +374,8 @@ export class SearchClient {
|
|
|
359
374
|
}
|
|
360
375
|
catch (e) {
|
|
361
376
|
span.setStatus({
|
|
362
|
-
|
|
363
|
-
|
|
377
|
+
status: "error",
|
|
378
|
+
error: e.message,
|
|
364
379
|
});
|
|
365
380
|
throw e;
|
|
366
381
|
}
|
|
@@ -383,8 +398,8 @@ export class SearchClient {
|
|
|
383
398
|
}
|
|
384
399
|
catch (e) {
|
|
385
400
|
span.setStatus({
|
|
386
|
-
|
|
387
|
-
|
|
401
|
+
status: "error",
|
|
402
|
+
error: e.message,
|
|
388
403
|
});
|
|
389
404
|
throw e;
|
|
390
405
|
}
|
|
@@ -407,8 +422,8 @@ export class SearchClient {
|
|
|
407
422
|
}
|
|
408
423
|
catch (e) {
|
|
409
424
|
span.setStatus({
|
|
410
|
-
|
|
411
|
-
|
|
425
|
+
status: "error",
|
|
426
|
+
error: e.message,
|
|
412
427
|
});
|
|
413
428
|
throw e;
|
|
414
429
|
}
|
|
@@ -430,8 +445,8 @@ export class SearchClient {
|
|
|
430
445
|
}
|
|
431
446
|
catch (e) {
|
|
432
447
|
span.setStatus({
|
|
433
|
-
|
|
434
|
-
|
|
448
|
+
status: "error",
|
|
449
|
+
error: e.message,
|
|
435
450
|
});
|
|
436
451
|
throw e;
|
|
437
452
|
}
|
|
@@ -446,7 +461,7 @@ export class SearchClient {
|
|
|
446
461
|
const payload = JSON.stringify({
|
|
447
462
|
apiVersion: this.apiVersion,
|
|
448
463
|
nextLink,
|
|
449
|
-
nextPageParameters
|
|
464
|
+
nextPageParameters,
|
|
450
465
|
});
|
|
451
466
|
return encode(payload);
|
|
452
467
|
}
|
|
@@ -462,7 +477,7 @@ export class SearchClient {
|
|
|
462
477
|
}
|
|
463
478
|
return {
|
|
464
479
|
nextLink: result.nextLink,
|
|
465
|
-
nextPageParameters: result.nextPageParameters
|
|
480
|
+
nextPageParameters: result.nextPageParameters,
|
|
466
481
|
};
|
|
467
482
|
}
|
|
468
483
|
catch (e) {
|
|
@@ -476,9 +491,9 @@ export class SearchClient {
|
|
|
476
491
|
operationOptions: {
|
|
477
492
|
abortSignal,
|
|
478
493
|
requestOptions,
|
|
479
|
-
tracingOptions
|
|
494
|
+
tracingOptions,
|
|
480
495
|
},
|
|
481
|
-
restOptions
|
|
496
|
+
restOptions,
|
|
482
497
|
};
|
|
483
498
|
}
|
|
484
499
|
convertSelect(select) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchClient.js","sourceRoot":"","sources":["../../src/searchClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/// <reference lib=\"esnext.asynciterable\" />\n\nimport {\n CommonClientOptions,\n InternalClientPipelineOptions,\n OperationOptions\n} from \"@azure/core-client\";\nimport { bearerTokenAuthenticationPolicy } from \"@azure/core-rest-pipeline\";\nimport { SearchClient as GeneratedClient } from \"./generated/data/searchClient\";\nimport { KeyCredential, TokenCredential, isTokenCredential } from \"@azure/core-auth\";\nimport { createSearchApiKeyCredentialPolicy } from \"./searchApiKeyCredentialPolicy\";\nimport { SDK_VERSION } from \"./constants\";\nimport { logger } from \"./logger\";\nimport {\n AutocompleteResult,\n AutocompleteRequest,\n SuggestRequest,\n IndexDocumentsResult\n} from \"./generated/data/models\";\nimport { createSpan } from \"./tracing\";\nimport { SpanStatusCode } from \"@azure/core-tracing\";\nimport { deserialize, serialize } from \"./serialization\";\nimport {\n CountDocumentsOptions,\n AutocompleteOptions,\n SearchOptions,\n SearchDocumentsResult,\n SearchIterator,\n ListSearchResultsPageSettings,\n SearchResult,\n SuggestOptions,\n SuggestDocumentsResult,\n GetDocumentOptions,\n IndexDocumentsOptions,\n UploadDocumentsOptions,\n MergeDocumentsOptions,\n DeleteDocumentsOptions,\n SearchDocumentsPageResult,\n MergeOrUploadDocumentsOptions,\n SearchRequest\n} from \"./indexModels\";\nimport { createOdataMetadataPolicy } from \"./odataMetadataPolicy\";\nimport { IndexDocumentsBatch } from \"./indexDocumentsBatch\";\nimport { encode, decode } from \"./base64\";\nimport * as utils from \"./serviceUtils\";\nimport { IndexDocumentsClient } from \"./searchIndexingBufferedSender\";\n\n/**\n * Client options used to configure Cognitive Search API requests.\n */\nexport interface SearchClientOptions extends CommonClientOptions {\n /**\n * The API version to use when communicating with the service.\n */\n apiVersion?: string;\n}\n\n/**\n * Class used to perform operations against a search index,\n * including querying documents in the index as well as\n * adding, updating, and removing them.\n */\nexport class SearchClient<T> implements IndexDocumentsClient<T> {\n /// Maintenance note: when updating supported API versions,\n /// the ContinuationToken logic will need to be updated below.\n\n /**\n * The API version to use when communicating with the service.\n */\n public readonly apiVersion: string = \"2020-06-30-Preview\";\n\n /**\n * The endpoint of the search service\n */\n public readonly endpoint: string;\n\n /**\n * The name of the index\n */\n public readonly indexName: string;\n\n /**\n * @internal\n * @hidden\n * A reference to the auto-generated SearchClient\n */\n private readonly client: GeneratedClient;\n\n /**\n * Creates an instance of SearchClient.\n *\n * Example usage:\n * ```ts\n * const { SearchClient, AzureKeyCredential } = require(\"@azure/search-documents\");\n *\n * const client = new SearchClient(\n * \"<endpoint>\",\n * \"<indexName>\",\n * new AzureKeyCredential(\"<Admin Key>\");\n * );\n * ```\n * @param endpoint - The endpoint of the search service\n * @param indexName - The name of the index\n * @param credential - Used to authenticate requests to the service.\n * @param options - Used to configure the Search client.\n */\n constructor(\n endpoint: string,\n indexName: string,\n credential: KeyCredential | TokenCredential,\n options: SearchClientOptions = {}\n ) {\n this.endpoint = endpoint;\n this.indexName = indexName;\n\n const libInfo = `azsdk-js-search-documents/${SDK_VERSION}`;\n if (!options.userAgentOptions) {\n options.userAgentOptions = {};\n }\n if (options.userAgentOptions.userAgentPrefix) {\n options.userAgentOptions.userAgentPrefix = `${options.userAgentOptions.userAgentPrefix} ${libInfo}`;\n } else {\n options.userAgentOptions.userAgentPrefix = libInfo;\n }\n\n const internalClientPipelineOptions: InternalClientPipelineOptions = {\n ...options,\n ...{\n loggingOptions: {\n logger: logger.info,\n additionalAllowedHeaderNames: [\n \"elapsed-time\",\n \"Location\",\n \"OData-MaxVersion\",\n \"OData-Version\",\n \"Prefer\",\n \"throttle-reason\"\n ]\n }\n }\n };\n\n let apiVersion = this.apiVersion;\n\n if (options.apiVersion) {\n if (![\"2020-06-30\", \"2021-04-30-Preview\"].includes(options.apiVersion)) {\n throw new Error(`Invalid Api Version: ${options.apiVersion}`);\n }\n apiVersion = options.apiVersion;\n }\n\n this.client = new GeneratedClient(\n this.endpoint,\n this.indexName,\n apiVersion,\n internalClientPipelineOptions\n );\n\n if (isTokenCredential(credential)) {\n this.client.pipeline.addPolicy(\n bearerTokenAuthenticationPolicy({ credential, scopes: utils.DEFAULT_SEARCH_SCOPE })\n );\n } else {\n this.client.pipeline.addPolicy(createSearchApiKeyCredentialPolicy(credential));\n }\n\n this.client.pipeline.addPolicy(createOdataMetadataPolicy(\"none\"));\n }\n\n /**\n * Retrieves the number of documents in the index.\n * @param options - Options to the count operation.\n */\n public async getDocumentsCount(options: CountDocumentsOptions = {}): Promise<number> {\n const { span, updatedOptions } = createSpan(\"SearchClient-getDocumentsCount\", options);\n try {\n let documentsCount: number = 0;\n await this.client.documents.count({\n ...updatedOptions,\n onResponse: (response) => {\n documentsCount = Number(response.bodyAsText);\n }\n });\n\n return documentsCount;\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Based on a partial searchText from the user, return a list\n * of potential completion strings based on a specified suggester.\n * @param searchText - The search text on which to base autocomplete results.\n * @param suggesterName - The name of the suggester as specified in the suggesters collection that's part of the index definition.\n * @param options - Options to the autocomplete operation.\n */\n public async autocomplete<Fields extends keyof T>(\n searchText: string,\n suggesterName: string,\n options: AutocompleteOptions<Fields> = {}\n ): Promise<AutocompleteResult> {\n const { operationOptions, restOptions } = this.extractOperationOptions({ ...options });\n const { searchFields, ...nonFieldOptions } = restOptions;\n const fullOptions: AutocompleteRequest = {\n searchText: searchText,\n suggesterName: suggesterName,\n searchFields: this.convertSearchFields<Fields>(searchFields),\n ...nonFieldOptions\n };\n\n if (!fullOptions.searchText) {\n throw new RangeError(\"searchText must be provided.\");\n }\n\n if (!fullOptions.suggesterName) {\n throw new RangeError(\"suggesterName must be provided.\");\n }\n\n const { span, updatedOptions } = createSpan(\"SearchClient-autocomplete\", operationOptions);\n\n try {\n const result = await this.client.documents.autocompletePost(fullOptions, updatedOptions);\n return result;\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n private async searchDocuments<Fields extends keyof T>(\n searchText?: string,\n options: SearchOptions<Fields> = {},\n nextPageParameters: SearchRequest = {}\n ): Promise<SearchDocumentsPageResult<Pick<T, Fields>>> {\n const { operationOptions, restOptions } = this.extractOperationOptions({ ...options });\n const { select, searchFields, orderBy, semanticFields, ...nonFieldOptions } = restOptions;\n const fullOptions: SearchRequest = {\n searchFields: this.convertSearchFields<Fields>(searchFields),\n semanticFields: this.convertSemanticFields(semanticFields),\n select: this.convertSelect<Fields>(select),\n orderBy: this.convertOrderBy(orderBy),\n ...nonFieldOptions,\n ...nextPageParameters\n };\n\n const { span, updatedOptions } = createSpan(\"SearchClient-searchDocuments\", operationOptions);\n\n try {\n const result = await this.client.documents.searchPost(\n {\n ...fullOptions,\n includeTotalResultCount: fullOptions.includeTotalCount,\n searchText: searchText\n },\n updatedOptions\n );\n\n const { results, count, coverage, facets, answers, nextLink } = result;\n\n const modifiedResults = utils.generatedSearchResultToPublicSearchResult<T>(results);\n\n const converted: SearchDocumentsPageResult<T> = {\n results: modifiedResults,\n count,\n coverage,\n facets,\n answers,\n continuationToken: this.encodeContinuationToken(nextLink, result.nextPageParameters)\n };\n\n return deserialize<SearchDocumentsPageResult<Pick<T, Fields>>>(converted);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n private async *listSearchResultsPage<Fields extends keyof T>(\n searchText?: string,\n options: SearchOptions<Fields> = {},\n settings: ListSearchResultsPageSettings = {}\n ): AsyncIterableIterator<SearchDocumentsPageResult<Pick<T, Fields>>> {\n let decodedContinuation = this.decodeContinuationToken(settings.continuationToken);\n let result = await this.searchDocuments<Fields>(\n searchText,\n options,\n decodedContinuation?.nextPageParameters\n );\n\n yield result;\n\n // Technically, we should also leverage nextLink, but the generated code\n // doesn't support this yet.\n while (result.continuationToken) {\n decodedContinuation = this.decodeContinuationToken(result.continuationToken);\n result = await this.searchDocuments(\n searchText,\n options,\n decodedContinuation?.nextPageParameters\n );\n yield result;\n }\n }\n\n private async *listSearchResultsAll<Fields extends keyof T>(\n firstPage: SearchDocumentsPageResult<Pick<T, Fields>>,\n searchText?: string,\n options: SearchOptions<Fields> = {}\n ): AsyncIterableIterator<SearchResult<Pick<T, Fields>>> {\n yield* firstPage.results;\n if (firstPage.continuationToken) {\n for await (const page of this.listSearchResultsPage(searchText, options, {\n continuationToken: firstPage.continuationToken\n })) {\n yield* page.results;\n }\n }\n }\n\n private listSearchResults<Fields extends keyof T>(\n firstPage: SearchDocumentsPageResult<Pick<T, Fields>>,\n searchText?: string,\n options: SearchOptions<Fields> = {}\n ): SearchIterator<Pick<T, Fields>> {\n const iter = this.listSearchResultsAll(firstPage, searchText, options);\n\n return {\n next() {\n return iter.next();\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n byPage: (settings: ListSearchResultsPageSettings = {}) => {\n return this.listSearchResultsPage(searchText, options, settings);\n }\n };\n }\n\n /**\n * Performs a search on the current index given\n * the specified arguments.\n * @param searchText - Text to search\n * @param options - Options for the search operation.\n */\n public async search<Fields extends keyof T>(\n searchText?: string,\n options: SearchOptions<Fields> = {}\n ): Promise<SearchDocumentsResult<Pick<T, Fields>>> {\n const { span, updatedOptions } = createSpan(\"SearchClient-search\", options);\n\n try {\n const pageResult = await this.searchDocuments(searchText, updatedOptions);\n\n const { count, coverage, facets, answers } = pageResult;\n\n return {\n count,\n coverage,\n facets,\n answers,\n results: this.listSearchResults(pageResult, searchText, updatedOptions)\n };\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Returns a short list of suggestions based on the searchText\n * and specified suggester.\n * @param searchText - The search text to use to suggest documents. Must be at least 1 character, and no more than 100 characters.\n * @param suggesterName - The name of the suggester as specified in the suggesters collection that's part of the index definition.\n * @param options - Options for the suggest operation\n */\n public async suggest<Fields extends keyof T = never>(\n searchText: string,\n suggesterName: string,\n options: SuggestOptions<Fields> = {}\n ): Promise<SuggestDocumentsResult<Pick<T, Fields>>> {\n const { operationOptions, restOptions } = this.extractOperationOptions({ ...options });\n const { select, searchFields, orderBy, ...nonFieldOptions } = restOptions;\n const fullOptions: SuggestRequest = {\n searchText: searchText,\n suggesterName: suggesterName,\n searchFields: this.convertSearchFields<Fields>(searchFields),\n select: this.convertSelect<Fields>(select),\n orderBy: this.convertOrderBy(orderBy),\n ...nonFieldOptions\n };\n\n if (!fullOptions.searchText) {\n throw new RangeError(\"searchText must be provided.\");\n }\n\n if (!fullOptions.suggesterName) {\n throw new RangeError(\"suggesterName must be provided.\");\n }\n\n const { span, updatedOptions } = createSpan(\"SearchClient-suggest\", operationOptions);\n\n try {\n const result = await this.client.documents.suggestPost(fullOptions, updatedOptions);\n\n const modifiedResult = utils.generatedSuggestDocumentsResultToPublicSuggestDocumentsResult<T>(\n result\n );\n\n return deserialize<SuggestDocumentsResult<Pick<T, Fields>>>(modifiedResult);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Retrieve a particular document from the index by key.\n * @param key - The primary key value of the document\n * @param options - Additional options\n */\n public async getDocument<Fields extends Extract<keyof T, string>>(\n key: string,\n options: GetDocumentOptions<Fields> = {}\n ): Promise<T> {\n const { span, updatedOptions } = createSpan(\"SearchClient-getDocument\", options);\n try {\n const result = await this.client.documents.get(key, updatedOptions);\n return deserialize<T>(result);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Perform a set of index modifications (upload, merge, mergeOrUpload, delete)\n * for the given set of documents.\n * This operation may partially succeed and not all document operations will\n * be reflected in the index. If you would like to treat this as an exception,\n * set the `throwOnAnyFailure` option to true.\n * For more details about how merging works, see: https://docs.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents\n * @param batch - An array of actions to perform on the index.\n * @param options - Additional options.\n */\n public async indexDocuments(\n // eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters\n batch: IndexDocumentsBatch<T>,\n options: IndexDocumentsOptions = {}\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-indexDocuments\", options);\n try {\n let status: number = 0;\n const result = await this.client.documents.index(\n { actions: serialize(batch.actions) },\n {\n ...updatedOptions,\n onResponse: (response) => {\n status = response.status;\n }\n }\n );\n if (options.throwOnAnyFailure && status === 207) {\n throw result;\n }\n return result;\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Upload an array of documents to the index.\n * @param documents - The documents to upload.\n * @param options - Additional options.\n */\n public async uploadDocuments(\n documents: T[],\n options: UploadDocumentsOptions = {}\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-uploadDocuments\", options);\n\n const batch = new IndexDocumentsBatch<T>();\n batch.upload(documents);\n\n try {\n return await this.indexDocuments(batch, updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Update a set of documents in the index.\n * For more details about how merging works, see https://docs.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents\n * @param documents - The updated documents.\n * @param options - Additional options.\n */\n public async mergeDocuments(\n documents: T[],\n options: MergeDocumentsOptions = {}\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-mergeDocuments\", options);\n\n const batch = new IndexDocumentsBatch<T>();\n batch.merge(documents);\n\n try {\n return await this.indexDocuments(batch, updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Update a set of documents in the index or upload them if they don't exist.\n * For more details about how merging works, see https://docs.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents\n * @param documents - The updated documents.\n * @param options - Additional options.\n */\n public async mergeOrUploadDocuments(\n documents: T[],\n options: MergeOrUploadDocumentsOptions = {}\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-mergeDocuments\", options);\n\n const batch = new IndexDocumentsBatch<T>();\n batch.mergeOrUpload(documents);\n\n try {\n return await this.indexDocuments(batch, updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Delete a set of documents.\n * @param documents - Documents to be deleted.\n * @param options - Additional options.\n */\n public async deleteDocuments(\n documents: T[],\n options?: DeleteDocumentsOptions\n ): Promise<IndexDocumentsResult>;\n\n /**\n * Delete a set of documents.\n * @param keyName - The name of their primary key in the index.\n * @param keyValues - The primary key values of documents to delete.\n * @param options - Additional options.\n */\n public async deleteDocuments(\n keyName: keyof T,\n keyValues: string[],\n options?: DeleteDocumentsOptions\n ): Promise<IndexDocumentsResult>;\n\n public async deleteDocuments(\n keyNameOrDocuments: keyof T | T[],\n keyValuesOrOptions?: string[] | DeleteDocumentsOptions,\n options: DeleteDocumentsOptions = {}\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-deleteDocuments\", options);\n\n const batch = new IndexDocumentsBatch<T>();\n if (typeof keyNameOrDocuments === \"string\") {\n batch.delete(keyNameOrDocuments, keyValuesOrOptions as string[]);\n } else {\n batch.delete(keyNameOrDocuments as T[]);\n }\n\n try {\n return await this.indexDocuments(batch, updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n private encodeContinuationToken(\n nextLink: string | undefined,\n nextPageParameters: SearchRequest | undefined\n ): string | undefined {\n if (!nextLink || !nextPageParameters) {\n return undefined;\n }\n const payload = JSON.stringify({\n apiVersion: this.apiVersion,\n nextLink,\n nextPageParameters\n });\n return encode(payload);\n }\n\n private decodeContinuationToken(\n token?: string\n ): { nextPageParameters: SearchRequest; nextLink: string } | undefined {\n if (!token) {\n return undefined;\n }\n\n const decodedToken = decode(token);\n\n try {\n const result: {\n apiVersion: string;\n nextLink: string;\n nextPageParameters: SearchRequest;\n } = JSON.parse(decodedToken);\n\n if (result.apiVersion !== this.apiVersion) {\n throw new RangeError(`Continuation token uses unsupported apiVersion \"${this.apiVersion}\"`);\n }\n\n return {\n nextLink: result.nextLink,\n nextPageParameters: result.nextPageParameters\n };\n } catch (e) {\n throw new Error(`Corrupted or invalid continuation token: ${decodedToken}`);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n private extractOperationOptions<T extends OperationOptions>(\n obj: T\n ): {\n operationOptions: OperationOptions;\n restOptions: any;\n } {\n const { abortSignal, requestOptions, tracingOptions, ...restOptions } = obj;\n\n return {\n operationOptions: {\n abortSignal,\n requestOptions,\n tracingOptions\n },\n restOptions\n };\n }\n\n private convertSelect<Fields>(select?: Fields[]): string | undefined {\n if (select) {\n return select.join(\",\");\n }\n return select;\n }\n\n private convertSearchFields<Fields>(searchFields?: Fields[]): string | undefined {\n if (searchFields) {\n return searchFields.join(\",\");\n }\n return searchFields;\n }\n\n private convertSemanticFields(semanticFields?: string[]): string | undefined {\n if (semanticFields) {\n return semanticFields.join(\",\");\n }\n return semanticFields;\n }\n\n private convertOrderBy(orderBy?: string[]): string | undefined {\n if (orderBy) {\n return orderBy.join(\",\");\n }\n return orderBy;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"searchClient.js","sourceRoot":"","sources":["../../src/searchClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/// <reference lib=\"esnext.asynciterable\" />\n\nimport { InternalClientPipelineOptions, OperationOptions } from \"@azure/core-client\";\nimport { bearerTokenAuthenticationPolicy } from \"@azure/core-rest-pipeline\";\nimport { SearchClient as GeneratedClient } from \"./generated/data/searchClient\";\nimport { KeyCredential, TokenCredential, isTokenCredential } from \"@azure/core-auth\";\nimport { createSearchApiKeyCredentialPolicy } from \"./searchApiKeyCredentialPolicy\";\nimport { SDK_VERSION } from \"./constants\";\nimport { logger } from \"./logger\";\nimport {\n AutocompleteResult,\n AutocompleteRequest,\n SuggestRequest,\n IndexDocumentsResult,\n} from \"./generated/data/models\";\nimport { createSpan } from \"./tracing\";\nimport { deserialize, serialize } from \"./serialization\";\nimport {\n CountDocumentsOptions,\n AutocompleteOptions,\n SearchOptions,\n SearchDocumentsResult,\n SearchIterator,\n ListSearchResultsPageSettings,\n SearchResult,\n SuggestOptions,\n SuggestDocumentsResult,\n GetDocumentOptions,\n IndexDocumentsOptions,\n UploadDocumentsOptions,\n MergeDocumentsOptions,\n DeleteDocumentsOptions,\n SearchDocumentsPageResult,\n MergeOrUploadDocumentsOptions,\n SearchRequest,\n} from \"./indexModels\";\nimport { createOdataMetadataPolicy } from \"./odataMetadataPolicy\";\nimport { IndexDocumentsBatch } from \"./indexDocumentsBatch\";\nimport { encode, decode } from \"./base64\";\nimport * as utils from \"./serviceUtils\";\nimport { IndexDocumentsClient } from \"./searchIndexingBufferedSender\";\nimport { ExtendedCommonClientOptions } from \"@azure/core-http-compat\";\nimport { KnownSearchAudience } from \"./searchAudience\";\n\n/**\n * Client options used to configure Cognitive Search API requests.\n */\nexport interface SearchClientOptions extends ExtendedCommonClientOptions {\n /**\n * The API version to use when communicating with the service.\n * @deprecated use {@Link serviceVersion} instead\n */\n apiVersion?: string;\n\n /**\n * The service version to use when communicating with the service.\n */\n serviceVersion?: string;\n\n /**\n * The Audience to use for authentication with Azure Active Directory (AAD). The\n * audience is not considered when using a shared key.\n * {@link KnownSearchAudience} can be used interchangeably with audience\n */\n audience?: string;\n}\n\n/**\n * Class used to perform operations against a search index,\n * including querying documents in the index as well as\n * adding, updating, and removing them.\n */\nexport class SearchClient<T> implements IndexDocumentsClient<T> {\n /// Maintenance note: when updating supported API versions,\n /// the ContinuationToken logic will need to be updated below.\n\n /**\n * The service version to use when communicating with the service.\n */\n public readonly serviceVersion: string = utils.defaultServiceVersion;\n\n /**\n * The API version to use when communicating with the service.\n * @deprecated use {@Link serviceVersion} instead\n */\n public readonly apiVersion: string = utils.defaultServiceVersion;\n\n /**\n * The endpoint of the search service\n */\n public readonly endpoint: string;\n\n /**\n * The name of the index\n */\n public readonly indexName: string;\n\n /**\n * @internal\n * @hidden\n * A reference to the auto-generated SearchClient\n */\n private readonly client: GeneratedClient;\n\n /**\n * Creates an instance of SearchClient.\n *\n * Example usage:\n * ```ts\n * const { SearchClient, AzureKeyCredential } = require(\"@azure/search-documents\");\n *\n * const client = new SearchClient(\n * \"<endpoint>\",\n * \"<indexName>\",\n * new AzureKeyCredential(\"<Admin Key>\");\n * );\n * ```\n * @param endpoint - The endpoint of the search service\n * @param indexName - The name of the index\n * @param credential - Used to authenticate requests to the service.\n * @param options - Used to configure the Search client.\n */\n constructor(\n endpoint: string,\n indexName: string,\n credential: KeyCredential | TokenCredential,\n options: SearchClientOptions = {}\n ) {\n this.endpoint = endpoint;\n this.indexName = indexName;\n\n const libInfo = `azsdk-js-search-documents/${SDK_VERSION}`;\n if (!options.userAgentOptions) {\n options.userAgentOptions = {};\n }\n if (options.userAgentOptions.userAgentPrefix) {\n options.userAgentOptions.userAgentPrefix = `${options.userAgentOptions.userAgentPrefix} ${libInfo}`;\n } else {\n options.userAgentOptions.userAgentPrefix = libInfo;\n }\n\n const internalClientPipelineOptions: InternalClientPipelineOptions = {\n ...options,\n ...{\n loggingOptions: {\n logger: logger.info,\n additionalAllowedHeaderNames: [\n \"elapsed-time\",\n \"Location\",\n \"OData-MaxVersion\",\n \"OData-Version\",\n \"Prefer\",\n \"throttle-reason\",\n ],\n },\n },\n };\n\n if (options.apiVersion) {\n if (!utils.serviceVersions.includes(options.apiVersion)) {\n throw new Error(`Invalid Api Version: ${options.apiVersion}`);\n }\n this.serviceVersion = options.apiVersion;\n this.apiVersion = options.apiVersion;\n }\n\n if (options.serviceVersion) {\n if (!utils.serviceVersions.includes(options.serviceVersion)) {\n throw new Error(`Invalid Service Version: ${options.serviceVersion}`);\n }\n this.serviceVersion = options.serviceVersion;\n this.apiVersion = options.serviceVersion;\n }\n\n this.client = new GeneratedClient(\n this.endpoint,\n this.indexName,\n this.serviceVersion,\n internalClientPipelineOptions\n );\n\n if (isTokenCredential(credential)) {\n const scope: string = options.audience\n ? `${options.audience}/.default`\n : `${KnownSearchAudience.AzurePublicCloud}/.default`;\n\n this.client.pipeline.addPolicy(\n bearerTokenAuthenticationPolicy({ credential, scopes: scope })\n );\n } else {\n this.client.pipeline.addPolicy(createSearchApiKeyCredentialPolicy(credential));\n }\n\n this.client.pipeline.addPolicy(createOdataMetadataPolicy(\"none\"));\n }\n\n /**\n * Retrieves the number of documents in the index.\n * @param options - Options to the count operation.\n */\n public async getDocumentsCount(options: CountDocumentsOptions = {}): Promise<number> {\n const { span, updatedOptions } = createSpan(\"SearchClient-getDocumentsCount\", options);\n try {\n let documentsCount: number = 0;\n await this.client.documents.count({\n ...updatedOptions,\n onResponse: (response) => {\n documentsCount = Number(response.bodyAsText);\n },\n });\n\n return documentsCount;\n } catch (e: any) {\n span.setStatus({\n status: \"error\",\n error: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Based on a partial searchText from the user, return a list\n * of potential completion strings based on a specified suggester.\n * @param searchText - The search text on which to base autocomplete results.\n * @param suggesterName - The name of the suggester as specified in the suggesters collection that's part of the index definition.\n * @param options - Options to the autocomplete operation.\n */\n public async autocomplete<Fields extends keyof T>(\n searchText: string,\n suggesterName: string,\n options: AutocompleteOptions<Fields> = {}\n ): Promise<AutocompleteResult> {\n const { operationOptions, restOptions } = this.extractOperationOptions({ ...options });\n const { searchFields, ...nonFieldOptions } = restOptions;\n const fullOptions: AutocompleteRequest = {\n searchText: searchText,\n suggesterName: suggesterName,\n searchFields: this.convertSearchFields<Fields>(searchFields),\n ...nonFieldOptions,\n };\n\n if (!fullOptions.searchText) {\n throw new RangeError(\"searchText must be provided.\");\n }\n\n if (!fullOptions.suggesterName) {\n throw new RangeError(\"suggesterName must be provided.\");\n }\n\n const { span, updatedOptions } = createSpan(\"SearchClient-autocomplete\", operationOptions);\n\n try {\n const result = await this.client.documents.autocompletePost(fullOptions, updatedOptions);\n return result;\n } catch (e: any) {\n span.setStatus({\n status: \"error\",\n error: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n private async searchDocuments<Fields extends keyof T>(\n searchText?: string,\n options: SearchOptions<Fields> = {},\n nextPageParameters: SearchRequest = {}\n ): Promise<SearchDocumentsPageResult<Pick<T, Fields>>> {\n const { operationOptions, restOptions } = this.extractOperationOptions({ ...options });\n const { select, searchFields, orderBy, semanticFields, ...nonFieldOptions } = restOptions;\n const fullOptions: SearchRequest = {\n searchFields: this.convertSearchFields<Fields>(searchFields),\n semanticFields: this.convertSemanticFields(semanticFields),\n select: this.convertSelect<Fields>(select),\n orderBy: this.convertOrderBy(orderBy),\n ...nonFieldOptions,\n ...nextPageParameters,\n };\n\n const { span, updatedOptions } = createSpan(\"SearchClient-searchDocuments\", operationOptions);\n\n try {\n const result = await this.client.documents.searchPost(\n {\n ...fullOptions,\n includeTotalResultCount: fullOptions.includeTotalCount,\n searchText: searchText,\n },\n updatedOptions\n );\n\n const { results, count, coverage, facets, answers, nextLink } = result;\n\n const modifiedResults = utils.generatedSearchResultToPublicSearchResult<T>(results);\n\n const converted: SearchDocumentsPageResult<T> = {\n results: modifiedResults,\n count,\n coverage,\n facets,\n answers,\n continuationToken: this.encodeContinuationToken(nextLink, result.nextPageParameters),\n };\n\n return deserialize<SearchDocumentsPageResult<Pick<T, Fields>>>(converted);\n } catch (e: any) {\n span.setStatus({\n status: \"error\",\n error: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n private async *listSearchResultsPage<Fields extends keyof T>(\n searchText?: string,\n options: SearchOptions<Fields> = {},\n settings: ListSearchResultsPageSettings = {}\n ): AsyncIterableIterator<SearchDocumentsPageResult<Pick<T, Fields>>> {\n let decodedContinuation = this.decodeContinuationToken(settings.continuationToken);\n let result = await this.searchDocuments<Fields>(\n searchText,\n options,\n decodedContinuation?.nextPageParameters\n );\n\n yield result;\n\n // Technically, we should also leverage nextLink, but the generated code\n // doesn't support this yet.\n while (result.continuationToken) {\n decodedContinuation = this.decodeContinuationToken(result.continuationToken);\n result = await this.searchDocuments(\n searchText,\n options,\n decodedContinuation?.nextPageParameters\n );\n yield result;\n }\n }\n\n private async *listSearchResultsAll<Fields extends keyof T>(\n firstPage: SearchDocumentsPageResult<Pick<T, Fields>>,\n searchText?: string,\n options: SearchOptions<Fields> = {}\n ): AsyncIterableIterator<SearchResult<Pick<T, Fields>>> {\n yield* firstPage.results;\n if (firstPage.continuationToken) {\n for await (const page of this.listSearchResultsPage(searchText, options, {\n continuationToken: firstPage.continuationToken,\n })) {\n yield* page.results;\n }\n }\n }\n\n private listSearchResults<Fields extends keyof T>(\n firstPage: SearchDocumentsPageResult<Pick<T, Fields>>,\n searchText?: string,\n options: SearchOptions<Fields> = {}\n ): SearchIterator<Pick<T, Fields>> {\n const iter = this.listSearchResultsAll(firstPage, searchText, options);\n\n return {\n next() {\n return iter.next();\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n byPage: (settings: ListSearchResultsPageSettings = {}) => {\n return this.listSearchResultsPage(searchText, options, settings);\n },\n };\n }\n\n /**\n * Performs a search on the current index given\n * the specified arguments.\n * @param searchText - Text to search\n * @param options - Options for the search operation.\n */\n public async search<Fields extends keyof T>(\n searchText?: string,\n options: SearchOptions<Fields> = {}\n ): Promise<SearchDocumentsResult<Pick<T, Fields>>> {\n const { span, updatedOptions } = createSpan(\"SearchClient-search\", options);\n\n try {\n const pageResult = await this.searchDocuments(searchText, updatedOptions);\n\n const { count, coverage, facets, answers } = pageResult;\n\n return {\n count,\n coverage,\n facets,\n answers,\n results: this.listSearchResults(pageResult, searchText, updatedOptions),\n };\n } catch (e: any) {\n span.setStatus({\n status: \"error\",\n error: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Returns a short list of suggestions based on the searchText\n * and specified suggester.\n * @param searchText - The search text to use to suggest documents. Must be at least 1 character, and no more than 100 characters.\n * @param suggesterName - The name of the suggester as specified in the suggesters collection that's part of the index definition.\n * @param options - Options for the suggest operation\n */\n public async suggest<Fields extends keyof T = never>(\n searchText: string,\n suggesterName: string,\n options: SuggestOptions<Fields> = {}\n ): Promise<SuggestDocumentsResult<Pick<T, Fields>>> {\n const { operationOptions, restOptions } = this.extractOperationOptions({ ...options });\n const { select, searchFields, orderBy, ...nonFieldOptions } = restOptions;\n const fullOptions: SuggestRequest = {\n searchText: searchText,\n suggesterName: suggesterName,\n searchFields: this.convertSearchFields<Fields>(searchFields),\n select: this.convertSelect<Fields>(select),\n orderBy: this.convertOrderBy(orderBy),\n ...nonFieldOptions,\n };\n\n if (!fullOptions.searchText) {\n throw new RangeError(\"searchText must be provided.\");\n }\n\n if (!fullOptions.suggesterName) {\n throw new RangeError(\"suggesterName must be provided.\");\n }\n\n const { span, updatedOptions } = createSpan(\"SearchClient-suggest\", operationOptions);\n\n try {\n const result = await this.client.documents.suggestPost(fullOptions, updatedOptions);\n\n const modifiedResult =\n utils.generatedSuggestDocumentsResultToPublicSuggestDocumentsResult<T>(result);\n\n return deserialize<SuggestDocumentsResult<Pick<T, Fields>>>(modifiedResult);\n } catch (e: any) {\n span.setStatus({\n status: \"error\",\n error: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Retrieve a particular document from the index by key.\n * @param key - The primary key value of the document\n * @param options - Additional options\n */\n public async getDocument<Fields extends Extract<keyof T, string>>(\n key: string,\n options: GetDocumentOptions<Fields> = {}\n ): Promise<T> {\n const { span, updatedOptions } = createSpan(\"SearchClient-getDocument\", options);\n try {\n const result = await this.client.documents.get(key, updatedOptions);\n return deserialize<T>(result);\n } catch (e: any) {\n span.setStatus({\n status: \"error\",\n error: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Perform a set of index modifications (upload, merge, mergeOrUpload, delete)\n * for the given set of documents.\n * This operation may partially succeed and not all document operations will\n * be reflected in the index. If you would like to treat this as an exception,\n * set the `throwOnAnyFailure` option to true.\n * For more details about how merging works, see: https://docs.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents\n * @param batch - An array of actions to perform on the index.\n * @param options - Additional options.\n */\n public async indexDocuments(\n // eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters\n batch: IndexDocumentsBatch<T>,\n options: IndexDocumentsOptions = {}\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-indexDocuments\", options);\n try {\n let status: number = 0;\n const result = await this.client.documents.index(\n { actions: serialize(batch.actions) },\n {\n ...updatedOptions,\n onResponse: (response) => {\n status = response.status;\n },\n }\n );\n if (options.throwOnAnyFailure && status === 207) {\n throw result;\n }\n return result;\n } catch (e: any) {\n span.setStatus({\n status: \"error\",\n error: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Upload an array of documents to the index.\n * @param documents - The documents to upload.\n * @param options - Additional options.\n */\n public async uploadDocuments(\n documents: T[],\n options: UploadDocumentsOptions = {}\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-uploadDocuments\", options);\n\n const batch = new IndexDocumentsBatch<T>();\n batch.upload(documents);\n\n try {\n return await this.indexDocuments(batch, updatedOptions);\n } catch (e: any) {\n span.setStatus({\n status: \"error\",\n error: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Update a set of documents in the index.\n * For more details about how merging works, see https://docs.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents\n * @param documents - The updated documents.\n * @param options - Additional options.\n */\n public async mergeDocuments(\n documents: T[],\n options: MergeDocumentsOptions = {}\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-mergeDocuments\", options);\n\n const batch = new IndexDocumentsBatch<T>();\n batch.merge(documents);\n\n try {\n return await this.indexDocuments(batch, updatedOptions);\n } catch (e: any) {\n span.setStatus({\n status: \"error\",\n error: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Update a set of documents in the index or upload them if they don't exist.\n * For more details about how merging works, see https://docs.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents\n * @param documents - The updated documents.\n * @param options - Additional options.\n */\n public async mergeOrUploadDocuments(\n documents: T[],\n options: MergeOrUploadDocumentsOptions = {}\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-mergeDocuments\", options);\n\n const batch = new IndexDocumentsBatch<T>();\n batch.mergeOrUpload(documents);\n\n try {\n return await this.indexDocuments(batch, updatedOptions);\n } catch (e: any) {\n span.setStatus({\n status: \"error\",\n error: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Delete a set of documents.\n * @param documents - Documents to be deleted.\n * @param options - Additional options.\n */\n public async deleteDocuments(\n documents: T[],\n options?: DeleteDocumentsOptions\n ): Promise<IndexDocumentsResult>;\n\n /**\n * Delete a set of documents.\n * @param keyName - The name of their primary key in the index.\n * @param keyValues - The primary key values of documents to delete.\n * @param options - Additional options.\n */\n public async deleteDocuments(\n keyName: keyof T,\n keyValues: string[],\n options?: DeleteDocumentsOptions\n ): Promise<IndexDocumentsResult>;\n\n public async deleteDocuments(\n keyNameOrDocuments: keyof T | T[],\n keyValuesOrOptions?: string[] | DeleteDocumentsOptions,\n options: DeleteDocumentsOptions = {}\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-deleteDocuments\", options);\n\n const batch = new IndexDocumentsBatch<T>();\n if (typeof keyNameOrDocuments === \"string\") {\n batch.delete(keyNameOrDocuments, keyValuesOrOptions as string[]);\n } else {\n batch.delete(keyNameOrDocuments as T[]);\n }\n\n try {\n return await this.indexDocuments(batch, updatedOptions);\n } catch (e: any) {\n span.setStatus({\n status: \"error\",\n error: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n private encodeContinuationToken(\n nextLink: string | undefined,\n nextPageParameters: SearchRequest | undefined\n ): string | undefined {\n if (!nextLink || !nextPageParameters) {\n return undefined;\n }\n const payload = JSON.stringify({\n apiVersion: this.apiVersion,\n nextLink,\n nextPageParameters,\n });\n return encode(payload);\n }\n\n private decodeContinuationToken(\n token?: string\n ): { nextPageParameters: SearchRequest; nextLink: string } | undefined {\n if (!token) {\n return undefined;\n }\n\n const decodedToken = decode(token);\n\n try {\n const result: {\n apiVersion: string;\n nextLink: string;\n nextPageParameters: SearchRequest;\n } = JSON.parse(decodedToken);\n\n if (result.apiVersion !== this.apiVersion) {\n throw new RangeError(`Continuation token uses unsupported apiVersion \"${this.apiVersion}\"`);\n }\n\n return {\n nextLink: result.nextLink,\n nextPageParameters: result.nextPageParameters,\n };\n } catch (e: any) {\n throw new Error(`Corrupted or invalid continuation token: ${decodedToken}`);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n private extractOperationOptions<T extends OperationOptions>(\n obj: T\n ): {\n operationOptions: OperationOptions;\n restOptions: any;\n } {\n const { abortSignal, requestOptions, tracingOptions, ...restOptions } = obj;\n\n return {\n operationOptions: {\n abortSignal,\n requestOptions,\n tracingOptions,\n },\n restOptions,\n };\n }\n\n private convertSelect<Fields>(select?: Fields[]): string | undefined {\n if (select) {\n return select.join(\",\");\n }\n return select;\n }\n\n private convertSearchFields<Fields>(searchFields?: Fields[]): string | undefined {\n if (searchFields) {\n return searchFields.join(\",\");\n }\n return searchFields;\n }\n\n private convertSemanticFields(semanticFields?: string[]): string | undefined {\n if (semanticFields) {\n return semanticFields.join(\",\");\n }\n return semanticFields;\n }\n\n private convertOrderBy(orderBy?: string[]): string | undefined {\n if (orderBy) {\n return orderBy.join(\",\");\n }\n return orderBy;\n }\n}\n"]}
|