@azure/search-documents 12.2.0-alpha.20250718.1 → 12.2.0-alpha.20250722.2
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/dist/browser/generated/data/models/mappers.js +32 -13
- package/dist/browser/generated/data/models/mappers.js.map +1 -1
- package/dist/browser/generated/data/operations/documents.js +1 -0
- package/dist/browser/generated/data/operations/documents.js.map +1 -1
- package/dist/browser/generated/data/searchClient.js +13 -3
- package/dist/browser/generated/data/searchClient.js.map +1 -1
- package/dist/browser/generated/service/models/mappers.js +687 -297
- package/dist/browser/generated/service/models/mappers.js.map +1 -1
- package/dist/browser/generated/service/operations/aliases.js +1 -0
- package/dist/browser/generated/service/operations/aliases.js.map +1 -1
- package/dist/browser/generated/service/operations/dataSources.js +1 -0
- package/dist/browser/generated/service/operations/dataSources.js.map +1 -1
- package/dist/browser/generated/service/operations/indexers.js +1 -0
- package/dist/browser/generated/service/operations/indexers.js.map +1 -1
- package/dist/browser/generated/service/operations/indexes.js +1 -0
- package/dist/browser/generated/service/operations/indexes.js.map +1 -1
- package/dist/browser/generated/service/operations/skillsets.js +1 -0
- package/dist/browser/generated/service/operations/skillsets.js.map +1 -1
- package/dist/browser/generated/service/operations/synonymMaps.js +1 -0
- package/dist/browser/generated/service/operations/synonymMaps.js.map +1 -1
- package/dist/browser/generated/service/searchServiceClient.js +15 -3
- package/dist/browser/generated/service/searchServiceClient.js.map +1 -1
- package/dist/browser/geographyPoint.js +8 -0
- package/dist/browser/geographyPoint.js.map +1 -1
- package/dist/browser/indexDocumentsBatch.js +20 -4
- package/dist/browser/indexDocumentsBatch.js.map +1 -1
- package/dist/browser/searchClient.js +139 -83
- package/dist/browser/searchClient.js.map +1 -1
- package/dist/browser/searchIndexClient.js +141 -146
- package/dist/browser/searchIndexClient.js.map +1 -1
- package/dist/browser/searchIndexerClient.js +80 -36
- package/dist/browser/searchIndexerClient.js.map +1 -1
- package/dist/browser/searchIndexingBufferedSender.js +51 -12
- package/dist/browser/searchIndexingBufferedSender.js.map +1 -1
- package/dist/browser/serviceUtils.js +159 -54
- package/dist/browser/serviceUtils.js.map +1 -1
- package/dist/browser/walk.js +9 -12
- package/dist/browser/walk.js.map +1 -1
- package/dist/commonjs/generated/data/models/mappers.js +32 -13
- package/dist/commonjs/generated/data/models/mappers.js.map +1 -1
- package/dist/commonjs/generated/data/operations/documents.js +1 -0
- package/dist/commonjs/generated/data/operations/documents.js.map +1 -1
- package/dist/commonjs/generated/data/searchClient.js +13 -3
- package/dist/commonjs/generated/data/searchClient.js.map +1 -1
- package/dist/commonjs/generated/service/models/mappers.js +687 -297
- package/dist/commonjs/generated/service/models/mappers.js.map +1 -1
- package/dist/commonjs/generated/service/operations/aliases.js +1 -0
- package/dist/commonjs/generated/service/operations/aliases.js.map +1 -1
- package/dist/commonjs/generated/service/operations/dataSources.js +1 -0
- package/dist/commonjs/generated/service/operations/dataSources.js.map +1 -1
- package/dist/commonjs/generated/service/operations/indexers.js +1 -0
- package/dist/commonjs/generated/service/operations/indexers.js.map +1 -1
- package/dist/commonjs/generated/service/operations/indexes.js +1 -0
- package/dist/commonjs/generated/service/operations/indexes.js.map +1 -1
- package/dist/commonjs/generated/service/operations/skillsets.js +1 -0
- package/dist/commonjs/generated/service/operations/skillsets.js.map +1 -1
- package/dist/commonjs/generated/service/operations/synonymMaps.js +1 -0
- package/dist/commonjs/generated/service/operations/synonymMaps.js.map +1 -1
- package/dist/commonjs/generated/service/searchServiceClient.js +15 -3
- package/dist/commonjs/generated/service/searchServiceClient.js.map +1 -1
- package/dist/commonjs/geographyPoint.js +8 -0
- package/dist/commonjs/geographyPoint.js.map +1 -1
- package/dist/commonjs/indexDocumentsBatch.js +20 -4
- package/dist/commonjs/indexDocumentsBatch.js.map +1 -1
- package/dist/commonjs/searchClient.js +139 -82
- package/dist/commonjs/searchClient.js.map +1 -1
- package/dist/commonjs/searchIndexClient.js +141 -145
- package/dist/commonjs/searchIndexClient.js.map +1 -1
- package/dist/commonjs/searchIndexerClient.js +80 -35
- package/dist/commonjs/searchIndexerClient.js.map +1 -1
- package/dist/commonjs/searchIndexingBufferedSender.js +51 -12
- package/dist/commonjs/searchIndexingBufferedSender.js.map +1 -1
- package/dist/commonjs/serviceUtils.js +159 -54
- package/dist/commonjs/serviceUtils.js.map +1 -1
- package/dist/commonjs/walk.js +9 -12
- package/dist/commonjs/walk.js.map +1 -1
- package/dist/esm/generated/data/models/mappers.js +32 -13
- package/dist/esm/generated/data/models/mappers.js.map +1 -1
- package/dist/esm/generated/data/operations/documents.js +1 -0
- package/dist/esm/generated/data/operations/documents.js.map +1 -1
- package/dist/esm/generated/data/searchClient.js +13 -3
- package/dist/esm/generated/data/searchClient.js.map +1 -1
- package/dist/esm/generated/service/models/mappers.js +687 -297
- package/dist/esm/generated/service/models/mappers.js.map +1 -1
- package/dist/esm/generated/service/operations/aliases.js +1 -0
- package/dist/esm/generated/service/operations/aliases.js.map +1 -1
- package/dist/esm/generated/service/operations/dataSources.js +1 -0
- package/dist/esm/generated/service/operations/dataSources.js.map +1 -1
- package/dist/esm/generated/service/operations/indexers.js +1 -0
- package/dist/esm/generated/service/operations/indexers.js.map +1 -1
- package/dist/esm/generated/service/operations/indexes.js +1 -0
- package/dist/esm/generated/service/operations/indexes.js.map +1 -1
- package/dist/esm/generated/service/operations/skillsets.js +1 -0
- package/dist/esm/generated/service/operations/skillsets.js.map +1 -1
- package/dist/esm/generated/service/operations/synonymMaps.js +1 -0
- package/dist/esm/generated/service/operations/synonymMaps.js.map +1 -1
- package/dist/esm/generated/service/searchServiceClient.js +15 -3
- package/dist/esm/generated/service/searchServiceClient.js.map +1 -1
- package/dist/esm/geographyPoint.js +8 -0
- package/dist/esm/geographyPoint.js.map +1 -1
- package/dist/esm/indexDocumentsBatch.js +20 -4
- package/dist/esm/indexDocumentsBatch.js.map +1 -1
- package/dist/esm/searchClient.js +139 -83
- package/dist/esm/searchClient.js.map +1 -1
- package/dist/esm/searchIndexClient.js +141 -146
- package/dist/esm/searchIndexClient.js.map +1 -1
- package/dist/esm/searchIndexerClient.js +80 -36
- package/dist/esm/searchIndexerClient.js.map +1 -1
- package/dist/esm/searchIndexingBufferedSender.js +51 -12
- package/dist/esm/searchIndexingBufferedSender.js.map +1 -1
- package/dist/esm/serviceUtils.js +159 -54
- package/dist/esm/serviceUtils.js.map +1 -1
- package/dist/esm/walk.js +9 -12
- package/dist/esm/walk.js.map +1 -1
- package/dist/react-native/generated/data/models/mappers.js +32 -13
- package/dist/react-native/generated/data/models/mappers.js.map +1 -1
- package/dist/react-native/generated/data/operations/documents.js +1 -0
- package/dist/react-native/generated/data/operations/documents.js.map +1 -1
- package/dist/react-native/generated/data/searchClient.js +13 -3
- package/dist/react-native/generated/data/searchClient.js.map +1 -1
- package/dist/react-native/generated/service/models/mappers.js +687 -297
- package/dist/react-native/generated/service/models/mappers.js.map +1 -1
- package/dist/react-native/generated/service/operations/aliases.js +1 -0
- package/dist/react-native/generated/service/operations/aliases.js.map +1 -1
- package/dist/react-native/generated/service/operations/dataSources.js +1 -0
- package/dist/react-native/generated/service/operations/dataSources.js.map +1 -1
- package/dist/react-native/generated/service/operations/indexers.js +1 -0
- package/dist/react-native/generated/service/operations/indexers.js.map +1 -1
- package/dist/react-native/generated/service/operations/indexes.js +1 -0
- package/dist/react-native/generated/service/operations/indexes.js.map +1 -1
- package/dist/react-native/generated/service/operations/skillsets.js +1 -0
- package/dist/react-native/generated/service/operations/skillsets.js.map +1 -1
- package/dist/react-native/generated/service/operations/synonymMaps.js +1 -0
- package/dist/react-native/generated/service/operations/synonymMaps.js.map +1 -1
- package/dist/react-native/generated/service/searchServiceClient.js +15 -3
- package/dist/react-native/generated/service/searchServiceClient.js.map +1 -1
- package/dist/react-native/geographyPoint.js +8 -0
- package/dist/react-native/geographyPoint.js.map +1 -1
- package/dist/react-native/indexDocumentsBatch.js +20 -4
- package/dist/react-native/indexDocumentsBatch.js.map +1 -1
- package/dist/react-native/searchClient.js +139 -83
- package/dist/react-native/searchClient.js.map +1 -1
- package/dist/react-native/searchIndexClient.js +141 -146
- package/dist/react-native/searchIndexClient.js.map +1 -1
- package/dist/react-native/searchIndexerClient.js +80 -36
- package/dist/react-native/searchIndexerClient.js.map +1 -1
- package/dist/react-native/searchIndexingBufferedSender.js +51 -12
- package/dist/react-native/searchIndexingBufferedSender.js.map +1 -1
- package/dist/react-native/serviceUtils.js +159 -54
- package/dist/react-native/serviceUtils.js.map +1 -1
- package/dist/react-native/walk.js +9 -12
- package/dist/react-native/walk.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT License.
|
|
3
|
-
import { __asyncDelegator, __asyncGenerator, __asyncValues, __await, __rest } from "tslib";
|
|
4
3
|
import { isTokenCredential } from "@azure/core-auth";
|
|
5
4
|
import { bearerTokenAuthenticationPolicy } from "@azure/core-rest-pipeline";
|
|
6
5
|
import { decode, encode } from "./base64.js";
|
|
@@ -19,6 +18,34 @@ import { createSpan } from "./tracing.js";
|
|
|
19
18
|
* adding, updating, and removing them.
|
|
20
19
|
*/
|
|
21
20
|
export class SearchClient {
|
|
21
|
+
/// Maintenance note: when updating supported API versions,
|
|
22
|
+
/// the ContinuationToken logic will need to be updated below.
|
|
23
|
+
/**
|
|
24
|
+
* The service version to use when communicating with the service.
|
|
25
|
+
*/
|
|
26
|
+
serviceVersion = utils.defaultServiceVersion;
|
|
27
|
+
/**
|
|
28
|
+
* The API version to use when communicating with the service.
|
|
29
|
+
* @deprecated use {@Link serviceVersion} instead
|
|
30
|
+
*/
|
|
31
|
+
apiVersion = utils.defaultServiceVersion;
|
|
32
|
+
/**
|
|
33
|
+
* The endpoint of the search service
|
|
34
|
+
*/
|
|
35
|
+
endpoint;
|
|
36
|
+
/**
|
|
37
|
+
* The name of the index
|
|
38
|
+
*/
|
|
39
|
+
indexName;
|
|
40
|
+
/**
|
|
41
|
+
* @hidden
|
|
42
|
+
* A reference to the auto-generated SearchClient
|
|
43
|
+
*/
|
|
44
|
+
client;
|
|
45
|
+
/**
|
|
46
|
+
* A reference to the internal HTTP pipeline for use with raw requests
|
|
47
|
+
*/
|
|
48
|
+
pipeline;
|
|
22
49
|
/**
|
|
23
50
|
* Creates an instance of SearchClient.
|
|
24
51
|
*
|
|
@@ -63,35 +90,26 @@ export class SearchClient {
|
|
|
63
90
|
* non-nullable type `string`.
|
|
64
91
|
*/
|
|
65
92
|
constructor(endpoint, indexName, credential, options = {}) {
|
|
66
|
-
var _a, _b;
|
|
67
|
-
/// Maintenance note: when updating supported API versions,
|
|
68
|
-
/// the ContinuationToken logic will need to be updated below.
|
|
69
|
-
/**
|
|
70
|
-
* The service version to use when communicating with the service.
|
|
71
|
-
*/
|
|
72
|
-
this.serviceVersion = utils.defaultServiceVersion;
|
|
73
|
-
/**
|
|
74
|
-
* The API version to use when communicating with the service.
|
|
75
|
-
* @deprecated use {@Link serviceVersion} instead
|
|
76
|
-
*/
|
|
77
|
-
this.apiVersion = utils.defaultServiceVersion;
|
|
78
93
|
this.endpoint = endpoint;
|
|
79
94
|
this.indexName = indexName;
|
|
80
|
-
const internalClientPipelineOptions =
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
95
|
+
const internalClientPipelineOptions = {
|
|
96
|
+
...options,
|
|
97
|
+
...{
|
|
98
|
+
loggingOptions: {
|
|
99
|
+
logger: logger.info,
|
|
100
|
+
additionalAllowedHeaderNames: [
|
|
101
|
+
"elapsed-time",
|
|
102
|
+
"Location",
|
|
103
|
+
"OData-MaxVersion",
|
|
104
|
+
"OData-Version",
|
|
105
|
+
"Prefer",
|
|
106
|
+
"throttle-reason",
|
|
107
|
+
],
|
|
108
|
+
},
|
|
91
109
|
},
|
|
92
|
-
}
|
|
110
|
+
};
|
|
93
111
|
this.serviceVersion =
|
|
94
|
-
|
|
112
|
+
options.serviceVersion ?? options.apiVersion ?? utils.defaultServiceVersion;
|
|
95
113
|
this.apiVersion = this.serviceVersion;
|
|
96
114
|
this.client = new GeneratedClient(this.endpoint, this.indexName, this.serviceVersion, internalClientPipelineOptions);
|
|
97
115
|
this.pipeline = this.client.pipeline;
|
|
@@ -115,12 +133,15 @@ export class SearchClient {
|
|
|
115
133
|
const { span, updatedOptions } = createSpan("SearchClient-getDocumentsCount", options);
|
|
116
134
|
try {
|
|
117
135
|
let documentsCount = 0;
|
|
118
|
-
await this.client.documents.count(
|
|
136
|
+
await this.client.documents.count({
|
|
137
|
+
...updatedOptions,
|
|
138
|
+
onResponse: (rawResponse, flatResponse) => {
|
|
119
139
|
documentsCount = Number(rawResponse.bodyAsText);
|
|
120
140
|
if (updatedOptions.onResponse) {
|
|
121
141
|
updatedOptions.onResponse(rawResponse, flatResponse);
|
|
122
142
|
}
|
|
123
|
-
}
|
|
143
|
+
},
|
|
144
|
+
});
|
|
124
145
|
return documentsCount;
|
|
125
146
|
}
|
|
126
147
|
catch (e) {
|
|
@@ -165,8 +186,13 @@ export class SearchClient {
|
|
|
165
186
|
* ```
|
|
166
187
|
*/
|
|
167
188
|
async autocomplete(searchText, suggesterName, options = {}) {
|
|
168
|
-
const { searchFields
|
|
169
|
-
const fullOptions =
|
|
189
|
+
const { searchFields, ...nonFieldOptions } = options;
|
|
190
|
+
const fullOptions = {
|
|
191
|
+
searchText: searchText,
|
|
192
|
+
suggesterName: suggesterName,
|
|
193
|
+
searchFields: this.convertSearchFields(searchFields),
|
|
194
|
+
...nonFieldOptions,
|
|
195
|
+
};
|
|
170
196
|
if (!fullOptions.searchText) {
|
|
171
197
|
throw new RangeError("searchText must be provided.");
|
|
172
198
|
}
|
|
@@ -190,17 +216,44 @@ export class SearchClient {
|
|
|
190
216
|
}
|
|
191
217
|
}
|
|
192
218
|
async searchDocuments(searchText, options = {}, nextPageParameters = {}) {
|
|
193
|
-
const
|
|
194
|
-
const
|
|
195
|
-
const
|
|
196
|
-
const fullOptions =
|
|
219
|
+
const { includeTotalCount, orderBy, searchFields, select, vectorSearchOptions, semanticSearchOptions, hybridSearch, ...restOptions } = options;
|
|
220
|
+
const { semanticFields, configurationName, errorMode, answers, captions, debugMode, queryRewrites, ...restSemanticOptions } = semanticSearchOptions ?? {};
|
|
221
|
+
const { queries, filterMode, ...restVectorOptions } = vectorSearchOptions ?? {};
|
|
222
|
+
const fullOptions = {
|
|
223
|
+
...restSemanticOptions,
|
|
224
|
+
...restVectorOptions,
|
|
225
|
+
...restOptions,
|
|
226
|
+
...nextPageParameters,
|
|
227
|
+
searchFields: this.convertSearchFields(searchFields),
|
|
228
|
+
semanticFields: this.convertSemanticFields(semanticFields),
|
|
229
|
+
select: this.convertSelect(select) || "*",
|
|
230
|
+
orderBy: this.convertOrderBy(orderBy),
|
|
231
|
+
includeTotalResultCount: includeTotalCount,
|
|
232
|
+
vectorQueries: queries?.map(this.convertVectorQuery.bind(this)),
|
|
233
|
+
answers: this.convertQueryAnswers(answers),
|
|
234
|
+
captions: this.convertQueryCaptions(captions),
|
|
235
|
+
semanticErrorHandling: errorMode,
|
|
236
|
+
semanticConfigurationName: configurationName,
|
|
237
|
+
debug: debugMode,
|
|
238
|
+
queryRewrites: this.convertQueryRewrites(queryRewrites),
|
|
239
|
+
vectorFilterMode: filterMode,
|
|
240
|
+
hybridSearch: hybridSearch,
|
|
241
|
+
};
|
|
197
242
|
const { span, updatedOptions } = createSpan("SearchClient-searchDocuments", options);
|
|
198
243
|
try {
|
|
199
|
-
const result = await this.client.documents.searchPost(
|
|
200
|
-
|
|
244
|
+
const result = await this.client.documents.searchPost({
|
|
245
|
+
...fullOptions,
|
|
246
|
+
searchText: searchText,
|
|
247
|
+
}, updatedOptions);
|
|
248
|
+
const { results, nextLink, nextPageParameters: resultNextPageParameters, semanticPartialResponseReason: semanticErrorReason, semanticPartialResponseType: semanticSearchResultsType, ...restResult } = result;
|
|
201
249
|
const modifiedResults = utils.generatedSearchResultToPublicSearchResult(results);
|
|
202
|
-
const converted =
|
|
203
|
-
|
|
250
|
+
const converted = {
|
|
251
|
+
...restResult,
|
|
252
|
+
results: modifiedResults,
|
|
253
|
+
semanticErrorReason,
|
|
254
|
+
semanticSearchResultsType,
|
|
255
|
+
continuationToken: this.encodeContinuationToken(nextLink, resultNextPageParameters),
|
|
256
|
+
};
|
|
204
257
|
return deserialize(converted);
|
|
205
258
|
}
|
|
206
259
|
catch (e) {
|
|
@@ -214,44 +267,27 @@ export class SearchClient {
|
|
|
214
267
|
span.end();
|
|
215
268
|
}
|
|
216
269
|
}
|
|
217
|
-
listSearchResultsPage(
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
}
|
|
229
|
-
});
|
|
270
|
+
async *listSearchResultsPage(searchText, options = {}, settings = {}) {
|
|
271
|
+
let decodedContinuation = this.decodeContinuationToken(settings.continuationToken);
|
|
272
|
+
let result = await this.searchDocuments(searchText, options, decodedContinuation?.nextPageParameters);
|
|
273
|
+
yield result;
|
|
274
|
+
// Technically, we should also leverage nextLink, but the generated code
|
|
275
|
+
// doesn't support this yet.
|
|
276
|
+
while (result.continuationToken) {
|
|
277
|
+
decodedContinuation = this.decodeContinuationToken(result.continuationToken);
|
|
278
|
+
result = await this.searchDocuments(searchText, options, decodedContinuation?.nextPageParameters);
|
|
279
|
+
yield result;
|
|
280
|
+
}
|
|
230
281
|
}
|
|
231
|
-
listSearchResultsAll(
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
continuationToken: firstPage.continuationToken,
|
|
239
|
-
})), _f; _f = yield __await(_e.next()), _a = _f.done, !_a; _d = true) {
|
|
240
|
-
_c = _f.value;
|
|
241
|
-
_d = false;
|
|
242
|
-
const page = _c;
|
|
243
|
-
yield __await(yield* __asyncDelegator(__asyncValues(page.results)));
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
247
|
-
finally {
|
|
248
|
-
try {
|
|
249
|
-
if (!_d && !_a && (_b = _e.return)) yield __await(_b.call(_e));
|
|
250
|
-
}
|
|
251
|
-
finally { if (e_1) throw e_1.error; }
|
|
252
|
-
}
|
|
282
|
+
async *listSearchResultsAll(firstPage, searchText, options = {}) {
|
|
283
|
+
yield* firstPage.results;
|
|
284
|
+
if (firstPage.continuationToken) {
|
|
285
|
+
for await (const page of this.listSearchResultsPage(searchText, options, {
|
|
286
|
+
continuationToken: firstPage.continuationToken,
|
|
287
|
+
})) {
|
|
288
|
+
yield* page.results;
|
|
253
289
|
}
|
|
254
|
-
}
|
|
290
|
+
}
|
|
255
291
|
}
|
|
256
292
|
listSearchResults(firstPage, searchText, options = {}) {
|
|
257
293
|
const iter = this.listSearchResultsAll(firstPage, searchText, options);
|
|
@@ -302,7 +338,10 @@ export class SearchClient {
|
|
|
302
338
|
const { span, updatedOptions } = createSpan("SearchClient-search", options);
|
|
303
339
|
try {
|
|
304
340
|
const pageResult = await this.searchDocuments(searchText, updatedOptions);
|
|
305
|
-
return
|
|
341
|
+
return {
|
|
342
|
+
...pageResult,
|
|
343
|
+
results: this.listSearchResults(pageResult, searchText, updatedOptions),
|
|
344
|
+
};
|
|
306
345
|
}
|
|
307
346
|
catch (e) {
|
|
308
347
|
span.setStatus({
|
|
@@ -348,8 +387,15 @@ export class SearchClient {
|
|
|
348
387
|
* ```
|
|
349
388
|
*/
|
|
350
389
|
async suggest(searchText, suggesterName, options = {}) {
|
|
351
|
-
const { select, searchFields, orderBy
|
|
352
|
-
const fullOptions =
|
|
390
|
+
const { select, searchFields, orderBy, ...nonFieldOptions } = options;
|
|
391
|
+
const fullOptions = {
|
|
392
|
+
searchText: searchText,
|
|
393
|
+
suggesterName: suggesterName,
|
|
394
|
+
searchFields: this.convertSearchFields(searchFields),
|
|
395
|
+
select: this.convertSelect(select),
|
|
396
|
+
orderBy: this.convertOrderBy(orderBy),
|
|
397
|
+
...nonFieldOptions,
|
|
398
|
+
};
|
|
353
399
|
if (!fullOptions.searchText) {
|
|
354
400
|
throw new RangeError("searchText must be provided.");
|
|
355
401
|
}
|
|
@@ -381,7 +427,10 @@ export class SearchClient {
|
|
|
381
427
|
async getDocument(key, options = {}) {
|
|
382
428
|
const { span, updatedOptions } = createSpan("SearchClient-getDocument", options);
|
|
383
429
|
try {
|
|
384
|
-
const result = await this.client.documents.get(key,
|
|
430
|
+
const result = await this.client.documents.get(key, {
|
|
431
|
+
...updatedOptions,
|
|
432
|
+
selectedFields: updatedOptions.selectedFields,
|
|
433
|
+
});
|
|
385
434
|
return deserialize(result);
|
|
386
435
|
}
|
|
387
436
|
catch (e) {
|
|
@@ -411,12 +460,15 @@ export class SearchClient {
|
|
|
411
460
|
const { span, updatedOptions } = createSpan("SearchClient-indexDocuments", options);
|
|
412
461
|
try {
|
|
413
462
|
let status = 0;
|
|
414
|
-
const result = await this.client.documents.index({ actions: serialize(batch.actions) },
|
|
463
|
+
const result = await this.client.documents.index({ actions: serialize(batch.actions) }, {
|
|
464
|
+
...updatedOptions,
|
|
465
|
+
onResponse: (rawResponse, flatResponse) => {
|
|
415
466
|
status = rawResponse.status;
|
|
416
467
|
if (updatedOptions.onResponse) {
|
|
417
468
|
updatedOptions.onResponse(rawResponse, flatResponse);
|
|
418
469
|
}
|
|
419
|
-
}
|
|
470
|
+
},
|
|
471
|
+
});
|
|
420
472
|
if (options.throwOnAnyFailure && status === 207) {
|
|
421
473
|
throw result;
|
|
422
474
|
}
|
|
@@ -627,13 +679,17 @@ export class SearchClient {
|
|
|
627
679
|
convertVectorQuery(vectorQuery) {
|
|
628
680
|
switch (vectorQuery.kind) {
|
|
629
681
|
case "text": {
|
|
630
|
-
const { fields, queryRewrites
|
|
631
|
-
return
|
|
682
|
+
const { fields, queryRewrites, ...restFields } = vectorQuery;
|
|
683
|
+
return {
|
|
684
|
+
...restFields,
|
|
685
|
+
fields: this.convertVectorQueryFields(fields),
|
|
686
|
+
queryRewrites: this.convertQueryRewrites(queryRewrites),
|
|
687
|
+
};
|
|
632
688
|
}
|
|
633
689
|
case "vector":
|
|
634
690
|
case "imageUrl":
|
|
635
691
|
case "imageBinary": {
|
|
636
|
-
return
|
|
692
|
+
return { ...vectorQuery, fields: this.convertVectorQueryFields(vectorQuery?.fields) };
|
|
637
693
|
}
|
|
638
694
|
default: {
|
|
639
695
|
logger.warning("Unknown vector query kind; sending without serialization");
|
|
@@ -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 type { KeyCredential, TokenCredential } from \"@azure/core-auth\";\nimport { isTokenCredential } from \"@azure/core-auth\";\nimport type { InternalClientPipelineOptions } from \"@azure/core-client\";\nimport type { ExtendedCommonClientOptions } from \"@azure/core-http-compat\";\nimport type { Pipeline } from \"@azure/core-rest-pipeline\";\nimport { bearerTokenAuthenticationPolicy } from \"@azure/core-rest-pipeline\";\nimport { decode, encode } from \"./base64.js\";\nimport type {\n AutocompleteRequest,\n AutocompleteResult,\n IndexDocumentsResult,\n QueryAnswerType as BaseAnswers,\n QueryCaptionType as BaseCaptions,\n QueryRewritesType as GeneratedQueryRewrites,\n SearchRequest as GeneratedSearchRequest,\n SuggestRequest,\n VectorQueryUnion as GeneratedVectorQuery,\n} from \"./generated/data/models/index.js\";\nimport { SearchClient as GeneratedClient } from \"./generated/data/searchClient.js\";\nimport { IndexDocumentsBatch } from \"./indexDocumentsBatch.js\";\nimport type {\n AutocompleteOptions,\n CountDocumentsOptions,\n DeleteDocumentsOptions,\n GetDocumentOptions,\n IndexDocumentsOptions,\n ListSearchResultsPageSettings,\n MergeDocumentsOptions,\n MergeOrUploadDocumentsOptions,\n NarrowedModel,\n QueryAnswer,\n QueryCaption,\n QueryRewrites,\n SearchDocumentsPageResult,\n SearchDocumentsResult,\n SearchFieldArray,\n SearchIterator,\n SearchOptions,\n SearchResult,\n SelectArray,\n SelectFields,\n SemanticErrorReason,\n SemanticSearchResultsType,\n SuggestDocumentsResult,\n SuggestOptions,\n UploadDocumentsOptions,\n VectorQuery,\n} from \"./indexModels.js\";\nimport { logger } from \"./logger.js\";\nimport { createOdataMetadataPolicy } from \"./odataMetadataPolicy.js\";\nimport { createSearchApiKeyCredentialPolicy } from \"./searchApiKeyCredentialPolicy.js\";\nimport { KnownSearchAudience } from \"./searchAudience.js\";\nimport type { IndexDocumentsClient } from \"./searchIndexingBufferedSender.js\";\nimport { deserialize, serialize } from \"./serialization.js\";\nimport * as utils from \"./serviceUtils.js\";\nimport { createSpan } from \"./tracing.js\";\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<TModel extends object> implements IndexDocumentsClient<TModel> {\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 * @hidden\n * A reference to the auto-generated SearchClient\n */\n private readonly client: GeneratedClient;\n\n /**\n * A reference to the internal HTTP pipeline for use with raw requests\n */\n public readonly pipeline: Pipeline;\n\n /**\n * Creates an instance of SearchClient.\n *\n * Example usage:\n * ```ts snippet:ReadmeSampleSearchClient\n * import { SearchClient, AzureKeyCredential } from \"@azure/search-documents\";\n *\n * const searchClient = new SearchClient(\n * \"<endpoint>\",\n * \"<indexName>\",\n * new AzureKeyCredential(\"<apiKey>\"),\n * );\n * ```\n *\n * Optionally, the type of the model can be used to enable strong typing and type hints:\n * ```ts snippet:ReadmeSampleSearchClientWithModel\n * import { SearchClient, AzureKeyCredential } from \"@azure/search-documents\";\n *\n * type TModel = {\n * keyName: string;\n * field1?: string | null;\n * field2?: {\n * anotherField?: string | null;\n * } | null;\n * };\n *\n * const searchClient = new SearchClient<TModel>(\n * \"<endpoint>\",\n * \"<indexName>\",\n * new AzureKeyCredential(\"<apiKey>\"),\n * );\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 * @typeParam TModel - An optional type that represents the documents stored in\n * the search index. For the best typing experience, all non-key fields should\n * be marked optional and nullable, and the key property should have the\n * non-nullable type `string`.\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 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 this.serviceVersion =\n options.serviceVersion ?? options.apiVersion ?? utils.defaultServiceVersion;\n this.apiVersion = this.serviceVersion;\n\n this.client = new GeneratedClient(\n this.endpoint,\n this.indexName,\n this.serviceVersion,\n internalClientPipelineOptions,\n );\n this.pipeline = this.client.pipeline;\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 // eslint-disable-next-line @azure/azure-sdk/ts-naming-options\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: (rawResponse, flatResponse) => {\n documentsCount = Number(rawResponse.bodyAsText);\n if (updatedOptions.onResponse) {\n updatedOptions.onResponse(rawResponse, flatResponse);\n }\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 * @example\n * ```ts snippet:ReadmeSampleAutocomplete\n * import { SearchClient, AzureKeyCredential, SearchFieldArray } from \"@azure/search-documents\";\n *\n * type TModel = {\n * key: string;\n * azure?: {\n * sdk: string | null;\n * } | null;\n * };\n *\n * const client = new SearchClient<TModel>(\n * \"endpoint.azure\",\n * \"indexName\",\n * new AzureKeyCredential(\"key\"),\n * );\n *\n * const searchFields: SearchFieldArray<TModel> = [\"azure/sdk\"];\n *\n * const autocompleteResult = await client.autocomplete(\"searchText\", \"suggesterName\", {\n * searchFields,\n * });\n * ```\n */\n public async autocomplete(\n searchText: string,\n suggesterName: string,\n options: AutocompleteOptions<TModel> = {},\n ): Promise<AutocompleteResult> {\n const { searchFields, ...nonFieldOptions } = options;\n const fullOptions: AutocompleteRequest = {\n searchText: searchText,\n suggesterName: suggesterName,\n searchFields: this.convertSearchFields(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\", options);\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<TFields extends SelectFields<TModel>>(\n searchText?: string,\n options: SearchOptions<TModel, TFields> = {},\n nextPageParameters: GeneratedSearchRequest = {},\n ): Promise<SearchDocumentsPageResult<TModel, TFields>> {\n const {\n includeTotalCount,\n orderBy,\n searchFields,\n select,\n vectorSearchOptions,\n semanticSearchOptions,\n hybridSearch,\n ...restOptions\n } = options as typeof options & { queryType: \"semantic\" };\n\n const {\n semanticFields,\n configurationName,\n errorMode,\n answers,\n captions,\n debugMode,\n queryRewrites,\n ...restSemanticOptions\n } = semanticSearchOptions ?? {};\n const { queries, filterMode, ...restVectorOptions } = vectorSearchOptions ?? {};\n\n const fullOptions: GeneratedSearchRequest = {\n ...restSemanticOptions,\n ...restVectorOptions,\n ...restOptions,\n ...nextPageParameters,\n searchFields: this.convertSearchFields(searchFields),\n semanticFields: this.convertSemanticFields(semanticFields),\n select: this.convertSelect<TFields>(select) || \"*\",\n orderBy: this.convertOrderBy(orderBy),\n includeTotalResultCount: includeTotalCount,\n vectorQueries: queries?.map(this.convertVectorQuery.bind(this)),\n answers: this.convertQueryAnswers(answers),\n captions: this.convertQueryCaptions(captions),\n semanticErrorHandling: errorMode,\n semanticConfigurationName: configurationName,\n debug: debugMode,\n queryRewrites: this.convertQueryRewrites(queryRewrites),\n vectorFilterMode: filterMode,\n hybridSearch: hybridSearch,\n };\n\n const { span, updatedOptions } = createSpan(\"SearchClient-searchDocuments\", options);\n\n try {\n const result = await this.client.documents.searchPost(\n {\n ...fullOptions,\n searchText: searchText,\n },\n updatedOptions,\n );\n\n const {\n results,\n nextLink,\n nextPageParameters: resultNextPageParameters,\n semanticPartialResponseReason: semanticErrorReason,\n semanticPartialResponseType: semanticSearchResultsType,\n ...restResult\n } = result as typeof result & {\n semanticPartialResponseReason: SemanticErrorReason | undefined;\n semanticPartialResponseType: SemanticSearchResultsType | undefined;\n };\n\n const modifiedResults = utils.generatedSearchResultToPublicSearchResult<TModel, TFields>(\n results,\n );\n\n const converted: SearchDocumentsPageResult<TModel, TFields> = {\n ...restResult,\n results: modifiedResults,\n semanticErrorReason,\n semanticSearchResultsType,\n continuationToken: this.encodeContinuationToken(nextLink, resultNextPageParameters),\n };\n\n return deserialize<SearchDocumentsPageResult<TModel, TFields>>(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<TFields extends SelectFields<TModel>>(\n searchText?: string,\n options: SearchOptions<TModel, TFields> = {},\n settings: ListSearchResultsPageSettings = {},\n ): AsyncIterableIterator<SearchDocumentsPageResult<TModel, TFields>> {\n let decodedContinuation = this.decodeContinuationToken(settings.continuationToken);\n let result = await this.searchDocuments(\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<TFields extends SelectFields<TModel>>(\n firstPage: SearchDocumentsPageResult<TModel, TFields>,\n searchText?: string,\n options: SearchOptions<TModel, TFields> = {},\n ): AsyncIterableIterator<SearchResult<TModel, TFields>> {\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<TFields extends SelectFields<TModel>>(\n firstPage: SearchDocumentsPageResult<TModel, TFields>,\n searchText?: string,\n options: SearchOptions<TModel, TFields> = {},\n ): SearchIterator<TModel, TFields> {\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 * @example\n * ```ts snippet:ReadmeSampleSearchTModel\n * import { SearchClient, AzureKeyCredential, SearchFieldArray } from \"@azure/search-documents\";\n *\n * type TModel = {\n * key: string;\n * azure?: {\n * sdk: string | null;\n * } | null;\n * };\n *\n * const client = new SearchClient<TModel>(\n * \"endpoint.azure\",\n * \"indexName\",\n * new AzureKeyCredential(\"key\"),\n * );\n *\n * const select = [\"azure/sdk\"] as const;\n * const searchFields: SearchFieldArray<TModel> = [\"azure/sdk\"];\n *\n * const searchResult = await client.search(\"searchText\", {\n * select,\n * searchFields,\n * });\n * ```\n */\n public async search<TFields extends SelectFields<TModel>>(\n searchText?: string,\n options?: SearchOptions<TModel, TFields>,\n ): Promise<SearchDocumentsResult<TModel, TFields>> {\n const { span, updatedOptions } = createSpan(\"SearchClient-search\", options);\n\n try {\n const pageResult = await this.searchDocuments<TFields>(searchText, updatedOptions);\n\n return {\n ...pageResult,\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 * @example\n * ```ts snippet:ReadmeSampleSuggest\n * import { SearchClient, AzureKeyCredential, SearchFieldArray } from \"@azure/search-documents\";\n *\n * type TModel = {\n * key: string;\n * azure?: {\n * sdk: string | null;\n * } | null;\n * };\n *\n * const client = new SearchClient<TModel>(\n * \"endpoint.azure\",\n * \"indexName\",\n * new AzureKeyCredential(\"key\"),\n * );\n *\n * const select = [\"azure/sdk\"] as const;\n * const searchFields: SearchFieldArray<TModel> = [\"azure/sdk\"];\n *\n * const suggestResult = await client.suggest(\"searchText\", \"suggesterName\", {\n * select,\n * searchFields,\n * });\n * ```\n */\n public async suggest<TFields extends SelectFields<TModel> = never>(\n searchText: string,\n suggesterName: string,\n options: SuggestOptions<TModel, TFields> = {},\n ): Promise<SuggestDocumentsResult<TModel, TFields>> {\n const { select, searchFields, orderBy, ...nonFieldOptions } = options;\n const fullOptions: SuggestRequest = {\n searchText: searchText,\n suggesterName: suggesterName,\n searchFields: this.convertSearchFields(searchFields),\n select: this.convertSelect<TFields>(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\", options);\n\n try {\n const result = await this.client.documents.suggestPost(fullOptions, updatedOptions);\n\n const modifiedResult = utils.generatedSuggestDocumentsResultToPublicSuggestDocumentsResult<\n TModel,\n TFields\n >(result);\n\n return deserialize<SuggestDocumentsResult<TModel, TFields>>(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<TFields extends SelectFields<TModel>>(\n key: string,\n options: GetDocumentOptions<TModel, TFields> = {},\n ): Promise<NarrowedModel<TModel, TFields>> {\n const { span, updatedOptions } = createSpan(\"SearchClient-getDocument\", options);\n try {\n const result = await this.client.documents.get(key, {\n ...updatedOptions,\n selectedFields: updatedOptions.selectedFields as string[] | undefined,\n });\n return deserialize<NarrowedModel<TModel, TFields>>(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://learn.microsoft.com/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<TModel>,\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: (rawResponse, flatResponse) => {\n status = rawResponse.status;\n if (updatedOptions.onResponse) {\n updatedOptions.onResponse(rawResponse, flatResponse);\n }\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: TModel[],\n options: UploadDocumentsOptions = {},\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-uploadDocuments\", options);\n\n const batch = new IndexDocumentsBatch<TModel>();\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://learn.microsoft.com/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: TModel[],\n options: MergeDocumentsOptions = {},\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-mergeDocuments\", options);\n\n const batch = new IndexDocumentsBatch<TModel>();\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://learn.microsoft.com/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: TModel[],\n options: MergeOrUploadDocumentsOptions = {},\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-mergeDocuments\", options);\n\n const batch = new IndexDocumentsBatch<TModel>();\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: TModel[],\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 TModel,\n keyValues: string[],\n options?: DeleteDocumentsOptions,\n ): Promise<IndexDocumentsResult>;\n\n public async deleteDocuments(\n keyNameOrDocuments: keyof TModel | TModel[],\n keyValuesOrOptions?: string[] | DeleteDocumentsOptions,\n options: DeleteDocumentsOptions = {},\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-deleteDocuments\", options);\n\n const batch = new IndexDocumentsBatch<TModel>();\n if (typeof keyNameOrDocuments === \"string\") {\n batch.delete(keyNameOrDocuments, keyValuesOrOptions as string[]);\n } else {\n batch.delete(keyNameOrDocuments as TModel[]);\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: GeneratedSearchRequest | 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: GeneratedSearchRequest; 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: GeneratedSearchRequest;\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 private convertSelect<TFields extends SelectFields<TModel>>(\n select?: SelectArray<TFields>,\n ): string | undefined {\n if (select) {\n return select.join(\",\");\n }\n return select;\n }\n\n private convertVectorQueryFields(fields?: SearchFieldArray<TModel>): string | undefined {\n if (fields) {\n return fields.join(\",\");\n }\n return fields;\n }\n\n private convertSearchFields(searchFields?: SearchFieldArray<TModel>): 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 private convertQueryAnswers(answers?: QueryAnswer): BaseAnswers | undefined {\n if (!answers) {\n return answers;\n }\n\n const config = [];\n const { answerType: output, count, threshold, maxAnswerLength } = answers;\n\n if (count) {\n config.push(`count-${count}`);\n }\n\n if (threshold) {\n config.push(`threshold-${threshold}`);\n }\n\n if (maxAnswerLength) {\n config.push(`maxcharlength-${maxAnswerLength}`);\n }\n\n if (config.length) {\n return output + `|${config.join(\",\")}`;\n }\n\n return output;\n }\n\n private convertQueryCaptions(captions?: QueryCaption): BaseCaptions | undefined {\n if (!captions) {\n return captions;\n }\n\n const config = [];\n const { captionType: output, highlight, maxCaptionLength } = captions;\n\n if (highlight !== undefined) {\n config.push(`highlight-${highlight}`);\n }\n\n if (maxCaptionLength) {\n config.push(`maxcharlength-${maxCaptionLength}`);\n }\n\n if (config.length) {\n return output + `|${config.join(\",\")}`;\n }\n\n return output;\n }\n\n private convertVectorQuery<T extends VectorQuery<TModel>>(vectorQuery: T): GeneratedVectorQuery {\n switch (vectorQuery.kind) {\n case \"text\": {\n const { fields, queryRewrites, ...restFields } = vectorQuery;\n return {\n ...restFields,\n fields: this.convertVectorQueryFields(fields),\n queryRewrites: this.convertQueryRewrites(queryRewrites),\n };\n }\n case \"vector\":\n case \"imageUrl\":\n case \"imageBinary\": {\n return { ...vectorQuery, fields: this.convertVectorQueryFields(vectorQuery?.fields) };\n }\n default: {\n logger.warning(\"Unknown vector query kind; sending without serialization\");\n return vectorQuery as any;\n }\n }\n }\n\n private convertQueryRewrites(queryRewrites?: QueryRewrites): GeneratedQueryRewrites | undefined {\n if (!queryRewrites) {\n return queryRewrites;\n }\n\n const { rewritesType: baseOutput } = queryRewrites;\n switch (baseOutput) {\n case \"generative\": {\n const { count } = queryRewrites;\n\n const config = [...(count === undefined ? [] : [`count-${count}`])];\n if (config.length) return baseOutput + `|${config.join(\",\")}`;\n return baseOutput;\n }\n default:\n return baseOutput;\n }\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 type { KeyCredential, TokenCredential } from \"@azure/core-auth\";\nimport { isTokenCredential } from \"@azure/core-auth\";\nimport type { InternalClientPipelineOptions } from \"@azure/core-client\";\nimport type { ExtendedCommonClientOptions } from \"@azure/core-http-compat\";\nimport type { Pipeline } from \"@azure/core-rest-pipeline\";\nimport { bearerTokenAuthenticationPolicy } from \"@azure/core-rest-pipeline\";\nimport { decode, encode } from \"./base64.js\";\nimport type {\n AutocompleteRequest,\n AutocompleteResult,\n IndexDocumentsResult,\n QueryAnswerType as BaseAnswers,\n QueryCaptionType as BaseCaptions,\n QueryRewritesType as GeneratedQueryRewrites,\n SearchRequest as GeneratedSearchRequest,\n SuggestRequest,\n VectorQueryUnion as GeneratedVectorQuery,\n} from \"./generated/data/models/index.js\";\nimport { SearchClient as GeneratedClient } from \"./generated/data/searchClient.js\";\nimport { IndexDocumentsBatch } from \"./indexDocumentsBatch.js\";\nimport type {\n AutocompleteOptions,\n CountDocumentsOptions,\n DeleteDocumentsOptions,\n GetDocumentOptions,\n IndexDocumentsOptions,\n ListSearchResultsPageSettings,\n MergeDocumentsOptions,\n MergeOrUploadDocumentsOptions,\n NarrowedModel,\n QueryAnswer,\n QueryCaption,\n QueryRewrites,\n SearchDocumentsPageResult,\n SearchDocumentsResult,\n SearchFieldArray,\n SearchIterator,\n SearchOptions,\n SearchResult,\n SelectArray,\n SelectFields,\n SemanticErrorReason,\n SemanticSearchResultsType,\n SuggestDocumentsResult,\n SuggestOptions,\n UploadDocumentsOptions,\n VectorQuery,\n} from \"./indexModels.js\";\nimport { logger } from \"./logger.js\";\nimport { createOdataMetadataPolicy } from \"./odataMetadataPolicy.js\";\nimport { createSearchApiKeyCredentialPolicy } from \"./searchApiKeyCredentialPolicy.js\";\nimport { KnownSearchAudience } from \"./searchAudience.js\";\nimport type { IndexDocumentsClient } from \"./searchIndexingBufferedSender.js\";\nimport { deserialize, serialize } from \"./serialization.js\";\nimport * as utils from \"./serviceUtils.js\";\nimport { createSpan } from \"./tracing.js\";\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<TModel extends object> implements IndexDocumentsClient<TModel> {\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 * @hidden\n * A reference to the auto-generated SearchClient\n */\n private readonly client: GeneratedClient;\n\n /**\n * A reference to the internal HTTP pipeline for use with raw requests\n */\n public readonly pipeline: Pipeline;\n\n /**\n * Creates an instance of SearchClient.\n *\n * Example usage:\n * ```ts snippet:ReadmeSampleSearchClient\n * import { SearchClient, AzureKeyCredential } from \"@azure/search-documents\";\n *\n * const searchClient = new SearchClient(\n * \"<endpoint>\",\n * \"<indexName>\",\n * new AzureKeyCredential(\"<apiKey>\"),\n * );\n * ```\n *\n * Optionally, the type of the model can be used to enable strong typing and type hints:\n * ```ts snippet:ReadmeSampleSearchClientWithModel\n * import { SearchClient, AzureKeyCredential } from \"@azure/search-documents\";\n *\n * type TModel = {\n * keyName: string;\n * field1?: string | null;\n * field2?: {\n * anotherField?: string | null;\n * } | null;\n * };\n *\n * const searchClient = new SearchClient<TModel>(\n * \"<endpoint>\",\n * \"<indexName>\",\n * new AzureKeyCredential(\"<apiKey>\"),\n * );\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 * @typeParam TModel - An optional type that represents the documents stored in\n * the search index. For the best typing experience, all non-key fields should\n * be marked optional and nullable, and the key property should have the\n * non-nullable type `string`.\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 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 this.serviceVersion =\n options.serviceVersion ?? options.apiVersion ?? utils.defaultServiceVersion;\n this.apiVersion = this.serviceVersion;\n\n this.client = new GeneratedClient(\n this.endpoint,\n this.indexName,\n this.serviceVersion,\n internalClientPipelineOptions,\n );\n this.pipeline = this.client.pipeline;\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 // eslint-disable-next-line @azure/azure-sdk/ts-naming-options\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: (rawResponse, flatResponse) => {\n documentsCount = Number(rawResponse.bodyAsText);\n if (updatedOptions.onResponse) {\n updatedOptions.onResponse(rawResponse, flatResponse);\n }\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 * @example\n * ```ts snippet:ReadmeSampleAutocomplete\n * import { SearchClient, AzureKeyCredential, SearchFieldArray } from \"@azure/search-documents\";\n *\n * type TModel = {\n * key: string;\n * azure?: {\n * sdk: string | null;\n * } | null;\n * };\n *\n * const client = new SearchClient<TModel>(\n * \"endpoint.azure\",\n * \"indexName\",\n * new AzureKeyCredential(\"key\"),\n * );\n *\n * const searchFields: SearchFieldArray<TModel> = [\"azure/sdk\"];\n *\n * const autocompleteResult = await client.autocomplete(\"searchText\", \"suggesterName\", {\n * searchFields,\n * });\n * ```\n */\n public async autocomplete(\n searchText: string,\n suggesterName: string,\n options: AutocompleteOptions<TModel> = {},\n ): Promise<AutocompleteResult> {\n const { searchFields, ...nonFieldOptions } = options;\n const fullOptions: AutocompleteRequest = {\n searchText: searchText,\n suggesterName: suggesterName,\n searchFields: this.convertSearchFields(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\", options);\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<TFields extends SelectFields<TModel>>(\n searchText?: string,\n options: SearchOptions<TModel, TFields> = {},\n nextPageParameters: GeneratedSearchRequest = {},\n ): Promise<SearchDocumentsPageResult<TModel, TFields>> {\n const {\n includeTotalCount,\n orderBy,\n searchFields,\n select,\n vectorSearchOptions,\n semanticSearchOptions,\n hybridSearch,\n ...restOptions\n } = options as typeof options & { queryType: \"semantic\" };\n\n const {\n semanticFields,\n configurationName,\n errorMode,\n answers,\n captions,\n debugMode,\n queryRewrites,\n ...restSemanticOptions\n } = semanticSearchOptions ?? {};\n const { queries, filterMode, ...restVectorOptions } = vectorSearchOptions ?? {};\n\n const fullOptions: GeneratedSearchRequest = {\n ...restSemanticOptions,\n ...restVectorOptions,\n ...restOptions,\n ...nextPageParameters,\n searchFields: this.convertSearchFields(searchFields),\n semanticFields: this.convertSemanticFields(semanticFields),\n select: this.convertSelect<TFields>(select) || \"*\",\n orderBy: this.convertOrderBy(orderBy),\n includeTotalResultCount: includeTotalCount,\n vectorQueries: queries?.map(this.convertVectorQuery.bind(this)),\n answers: this.convertQueryAnswers(answers),\n captions: this.convertQueryCaptions(captions),\n semanticErrorHandling: errorMode,\n semanticConfigurationName: configurationName,\n debug: debugMode,\n queryRewrites: this.convertQueryRewrites(queryRewrites),\n vectorFilterMode: filterMode,\n hybridSearch: hybridSearch,\n };\n\n const { span, updatedOptions } = createSpan(\"SearchClient-searchDocuments\", options);\n\n try {\n const result = await this.client.documents.searchPost(\n {\n ...fullOptions,\n searchText: searchText,\n },\n updatedOptions,\n );\n\n const {\n results,\n nextLink,\n nextPageParameters: resultNextPageParameters,\n semanticPartialResponseReason: semanticErrorReason,\n semanticPartialResponseType: semanticSearchResultsType,\n ...restResult\n } = result as typeof result & {\n semanticPartialResponseReason: SemanticErrorReason | undefined;\n semanticPartialResponseType: SemanticSearchResultsType | undefined;\n };\n\n const modifiedResults = utils.generatedSearchResultToPublicSearchResult<TModel, TFields>(\n results,\n );\n\n const converted: SearchDocumentsPageResult<TModel, TFields> = {\n ...restResult,\n results: modifiedResults,\n semanticErrorReason,\n semanticSearchResultsType,\n continuationToken: this.encodeContinuationToken(nextLink, resultNextPageParameters),\n };\n\n return deserialize<SearchDocumentsPageResult<TModel, TFields>>(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<TFields extends SelectFields<TModel>>(\n searchText?: string,\n options: SearchOptions<TModel, TFields> = {},\n settings: ListSearchResultsPageSettings = {},\n ): AsyncIterableIterator<SearchDocumentsPageResult<TModel, TFields>> {\n let decodedContinuation = this.decodeContinuationToken(settings.continuationToken);\n let result = await this.searchDocuments(\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<TFields extends SelectFields<TModel>>(\n firstPage: SearchDocumentsPageResult<TModel, TFields>,\n searchText?: string,\n options: SearchOptions<TModel, TFields> = {},\n ): AsyncIterableIterator<SearchResult<TModel, TFields>> {\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<TFields extends SelectFields<TModel>>(\n firstPage: SearchDocumentsPageResult<TModel, TFields>,\n searchText?: string,\n options: SearchOptions<TModel, TFields> = {},\n ): SearchIterator<TModel, TFields> {\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 * @example\n * ```ts snippet:ReadmeSampleSearchTModel\n * import { SearchClient, AzureKeyCredential, SearchFieldArray } from \"@azure/search-documents\";\n *\n * type TModel = {\n * key: string;\n * azure?: {\n * sdk: string | null;\n * } | null;\n * };\n *\n * const client = new SearchClient<TModel>(\n * \"endpoint.azure\",\n * \"indexName\",\n * new AzureKeyCredential(\"key\"),\n * );\n *\n * const select = [\"azure/sdk\"] as const;\n * const searchFields: SearchFieldArray<TModel> = [\"azure/sdk\"];\n *\n * const searchResult = await client.search(\"searchText\", {\n * select,\n * searchFields,\n * });\n * ```\n */\n public async search<TFields extends SelectFields<TModel>>(\n searchText?: string,\n options?: SearchOptions<TModel, TFields>,\n ): Promise<SearchDocumentsResult<TModel, TFields>> {\n const { span, updatedOptions } = createSpan(\"SearchClient-search\", options);\n\n try {\n const pageResult = await this.searchDocuments<TFields>(searchText, updatedOptions);\n\n return {\n ...pageResult,\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 * @example\n * ```ts snippet:ReadmeSampleSuggest\n * import { SearchClient, AzureKeyCredential, SearchFieldArray } from \"@azure/search-documents\";\n *\n * type TModel = {\n * key: string;\n * azure?: {\n * sdk: string | null;\n * } | null;\n * };\n *\n * const client = new SearchClient<TModel>(\n * \"endpoint.azure\",\n * \"indexName\",\n * new AzureKeyCredential(\"key\"),\n * );\n *\n * const select = [\"azure/sdk\"] as const;\n * const searchFields: SearchFieldArray<TModel> = [\"azure/sdk\"];\n *\n * const suggestResult = await client.suggest(\"searchText\", \"suggesterName\", {\n * select,\n * searchFields,\n * });\n * ```\n */\n public async suggest<TFields extends SelectFields<TModel> = never>(\n searchText: string,\n suggesterName: string,\n options: SuggestOptions<TModel, TFields> = {},\n ): Promise<SuggestDocumentsResult<TModel, TFields>> {\n const { select, searchFields, orderBy, ...nonFieldOptions } = options;\n const fullOptions: SuggestRequest = {\n searchText: searchText,\n suggesterName: suggesterName,\n searchFields: this.convertSearchFields(searchFields),\n select: this.convertSelect<TFields>(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\", options);\n\n try {\n const result = await this.client.documents.suggestPost(fullOptions, updatedOptions);\n\n const modifiedResult = utils.generatedSuggestDocumentsResultToPublicSuggestDocumentsResult<\n TModel,\n TFields\n >(result);\n\n return deserialize<SuggestDocumentsResult<TModel, TFields>>(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<TFields extends SelectFields<TModel>>(\n key: string,\n options: GetDocumentOptions<TModel, TFields> = {},\n ): Promise<NarrowedModel<TModel, TFields>> {\n const { span, updatedOptions } = createSpan(\"SearchClient-getDocument\", options);\n try {\n const result = await this.client.documents.get(key, {\n ...updatedOptions,\n selectedFields: updatedOptions.selectedFields as string[] | undefined,\n });\n return deserialize<NarrowedModel<TModel, TFields>>(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://learn.microsoft.com/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<TModel>,\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: (rawResponse, flatResponse) => {\n status = rawResponse.status;\n if (updatedOptions.onResponse) {\n updatedOptions.onResponse(rawResponse, flatResponse);\n }\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: TModel[],\n options: UploadDocumentsOptions = {},\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-uploadDocuments\", options);\n\n const batch = new IndexDocumentsBatch<TModel>();\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://learn.microsoft.com/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: TModel[],\n options: MergeDocumentsOptions = {},\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-mergeDocuments\", options);\n\n const batch = new IndexDocumentsBatch<TModel>();\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://learn.microsoft.com/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: TModel[],\n options: MergeOrUploadDocumentsOptions = {},\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-mergeDocuments\", options);\n\n const batch = new IndexDocumentsBatch<TModel>();\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: TModel[],\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 TModel,\n keyValues: string[],\n options?: DeleteDocumentsOptions,\n ): Promise<IndexDocumentsResult>;\n\n public async deleteDocuments(\n keyNameOrDocuments: keyof TModel | TModel[],\n keyValuesOrOptions?: string[] | DeleteDocumentsOptions,\n options: DeleteDocumentsOptions = {},\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-deleteDocuments\", options);\n\n const batch = new IndexDocumentsBatch<TModel>();\n if (typeof keyNameOrDocuments === \"string\") {\n batch.delete(keyNameOrDocuments, keyValuesOrOptions as string[]);\n } else {\n batch.delete(keyNameOrDocuments as TModel[]);\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: GeneratedSearchRequest | 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: GeneratedSearchRequest; 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: GeneratedSearchRequest;\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 private convertSelect<TFields extends SelectFields<TModel>>(\n select?: SelectArray<TFields>,\n ): string | undefined {\n if (select) {\n return select.join(\",\");\n }\n return select;\n }\n\n private convertVectorQueryFields(fields?: SearchFieldArray<TModel>): string | undefined {\n if (fields) {\n return fields.join(\",\");\n }\n return fields;\n }\n\n private convertSearchFields(searchFields?: SearchFieldArray<TModel>): 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 private convertQueryAnswers(answers?: QueryAnswer): BaseAnswers | undefined {\n if (!answers) {\n return answers;\n }\n\n const config = [];\n const { answerType: output, count, threshold, maxAnswerLength } = answers;\n\n if (count) {\n config.push(`count-${count}`);\n }\n\n if (threshold) {\n config.push(`threshold-${threshold}`);\n }\n\n if (maxAnswerLength) {\n config.push(`maxcharlength-${maxAnswerLength}`);\n }\n\n if (config.length) {\n return output + `|${config.join(\",\")}`;\n }\n\n return output;\n }\n\n private convertQueryCaptions(captions?: QueryCaption): BaseCaptions | undefined {\n if (!captions) {\n return captions;\n }\n\n const config = [];\n const { captionType: output, highlight, maxCaptionLength } = captions;\n\n if (highlight !== undefined) {\n config.push(`highlight-${highlight}`);\n }\n\n if (maxCaptionLength) {\n config.push(`maxcharlength-${maxCaptionLength}`);\n }\n\n if (config.length) {\n return output + `|${config.join(\",\")}`;\n }\n\n return output;\n }\n\n private convertVectorQuery<T extends VectorQuery<TModel>>(vectorQuery: T): GeneratedVectorQuery {\n switch (vectorQuery.kind) {\n case \"text\": {\n const { fields, queryRewrites, ...restFields } = vectorQuery;\n return {\n ...restFields,\n fields: this.convertVectorQueryFields(fields),\n queryRewrites: this.convertQueryRewrites(queryRewrites),\n };\n }\n case \"vector\":\n case \"imageUrl\":\n case \"imageBinary\": {\n return { ...vectorQuery, fields: this.convertVectorQueryFields(vectorQuery?.fields) };\n }\n default: {\n logger.warning(\"Unknown vector query kind; sending without serialization\");\n return vectorQuery as any;\n }\n }\n }\n\n private convertQueryRewrites(queryRewrites?: QueryRewrites): GeneratedQueryRewrites | undefined {\n if (!queryRewrites) {\n return queryRewrites;\n }\n\n const { rewritesType: baseOutput } = queryRewrites;\n switch (baseOutput) {\n case \"generative\": {\n const { count } = queryRewrites;\n\n const config = [...(count === undefined ? [] : [`count-${count}`])];\n if (config.length) return baseOutput + `|${config.join(\",\")}`;\n return baseOutput;\n }\n default:\n return baseOutput;\n }\n }\n}\n"]}
|