@azure/search-documents 12.2.0-alpha.20241230.1 → 12.2.0-alpha.20250416.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +3 -3
- package/README.md +36 -34
- package/dist/browser/indexDocumentsBatch.d.ts +2 -2
- package/dist/browser/indexDocumentsBatch.js +2 -2
- package/dist/browser/indexDocumentsBatch.js.map +1 -1
- package/dist/browser/odata.d.ts +1 -1
- package/dist/browser/odata.js +1 -1
- package/dist/browser/odata.js.map +1 -1
- package/dist/browser/searchClient.d.ts +3 -3
- package/dist/browser/searchClient.js +3 -3
- package/dist/browser/searchClient.js.map +1 -1
- package/dist/browser/serviceModels.d.ts +2 -2
- package/dist/browser/serviceModels.js +2 -2
- package/dist/browser/serviceModels.js.map +1 -1
- package/dist/browser/tracing.d.ts.map +1 -1
- package/dist/commonjs/indexDocumentsBatch.d.ts +2 -2
- package/dist/commonjs/indexDocumentsBatch.js +2 -2
- package/dist/commonjs/indexDocumentsBatch.js.map +1 -1
- package/dist/commonjs/odata.d.ts +1 -1
- package/dist/commonjs/odata.js +1 -1
- package/dist/commonjs/odata.js.map +1 -1
- package/dist/commonjs/searchClient.d.ts +3 -3
- package/dist/commonjs/searchClient.js +3 -3
- package/dist/commonjs/searchClient.js.map +1 -1
- package/dist/commonjs/serviceModels.d.ts +2 -2
- package/dist/commonjs/serviceModels.js +2 -2
- package/dist/commonjs/serviceModels.js.map +1 -1
- package/dist/commonjs/tracing.d.ts.map +1 -1
- package/dist/commonjs/tsdoc-metadata.json +1 -1
- package/dist/esm/indexDocumentsBatch.d.ts +2 -2
- package/dist/esm/indexDocumentsBatch.js +2 -2
- package/dist/esm/indexDocumentsBatch.js.map +1 -1
- package/dist/esm/odata.d.ts +1 -1
- package/dist/esm/odata.js +1 -1
- package/dist/esm/odata.js.map +1 -1
- package/dist/esm/searchClient.d.ts +3 -3
- package/dist/esm/searchClient.js +3 -3
- package/dist/esm/searchClient.js.map +1 -1
- package/dist/esm/serviceModels.d.ts +2 -2
- package/dist/esm/serviceModels.js +2 -2
- package/dist/esm/serviceModels.js.map +1 -1
- package/dist/esm/tracing.d.ts.map +1 -1
- package/dist/react-native/indexDocumentsBatch.d.ts +2 -2
- package/dist/react-native/indexDocumentsBatch.js +2 -2
- package/dist/react-native/indexDocumentsBatch.js.map +1 -1
- package/dist/react-native/odata.d.ts +1 -1
- package/dist/react-native/odata.js +1 -1
- package/dist/react-native/odata.js.map +1 -1
- package/dist/react-native/searchClient.d.ts +3 -3
- package/dist/react-native/searchClient.js +3 -3
- package/dist/react-native/searchClient.js.map +1 -1
- package/dist/react-native/serviceModels.d.ts +2 -2
- package/dist/react-native/serviceModels.js +2 -2
- package/dist/react-native/serviceModels.js.map +1 -1
- package/dist/react-native/tracing.d.ts.map +1 -1
- package/package.json +7 -9
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
Copyright (c) Microsoft Corporation.
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
MIT License
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -12,7 +12,7 @@ furnished to do so, subject to the following conditions:
|
|
|
12
12
|
The above copyright notice and this permission notice shall be included in all
|
|
13
13
|
copies or substantial portions of the Software.
|
|
14
14
|
|
|
15
|
-
THE SOFTWARE IS PROVIDED
|
|
15
|
+
THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
16
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
17
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
18
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Azure AI Search client library for JavaScript
|
|
2
2
|
|
|
3
|
-
[Azure AI Search](https://
|
|
3
|
+
[Azure AI Search](https://learn.microsoft.com/azure/search/) (formerly known as "Azure Cognitive Search") is an AI-powered information retrieval platform that helps developers build rich search experiences and generative AI apps that combine large language models with enterprise data.
|
|
4
4
|
|
|
5
5
|
The Azure AI Search service is well suited for the following application scenarios:
|
|
6
6
|
|
|
@@ -33,9 +33,9 @@ Key links:
|
|
|
33
33
|
|
|
34
34
|
- [Source code](https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/search/search-documents/)
|
|
35
35
|
- [Package (NPM)](https://www.npmjs.com/package/@azure/search-documents)
|
|
36
|
-
- [API reference documentation](https://
|
|
37
|
-
- [REST API documentation](https://
|
|
38
|
-
- [Product documentation](https://
|
|
36
|
+
- [API reference documentation](https://learn.microsoft.com/javascript/api/@azure/search-documents)
|
|
37
|
+
- [REST API documentation](https://learn.microsoft.com/rest/api/searchservice/)
|
|
38
|
+
- [Product documentation](https://learn.microsoft.com/azure/search/)
|
|
39
39
|
- [Samples](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/search/search-documents/samples)
|
|
40
40
|
|
|
41
41
|
## Getting started
|
|
@@ -64,7 +64,7 @@ To create a new search service, you can use the [Azure portal][create_search_ser
|
|
|
64
64
|
az search service create --name <mysearch> --resource-group <mysearch-rg> --sku free --location westus
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
-
See [choosing a pricing tier](https://
|
|
67
|
+
See [choosing a pricing tier](https://learn.microsoft.com/azure/search/search-sku-tier) for more information about available options.
|
|
68
68
|
|
|
69
69
|
### Authenticate the client
|
|
70
70
|
|
|
@@ -74,7 +74,7 @@ To interact with the search service, you'll need to create an instance of the ap
|
|
|
74
74
|
|
|
75
75
|
An API key can be an easier approach to start with because it doesn't require pre-existing role assignments.
|
|
76
76
|
|
|
77
|
-
You can get the **endpoint** and an **API key** from the search service in the [Azure portal](https://portal.azure.com/). Please refer the [documentation](https://
|
|
77
|
+
You can get the **endpoint** and an **API key** from the search service in the [Azure portal](https://portal.azure.com/). Please refer the [documentation](https://learn.microsoft.com/azure/search/search-security-api-keys) for instructions on how to get an API key.
|
|
78
78
|
|
|
79
79
|
Alternatively, you can use the following [Azure CLI](https://learn.microsoft.com/cli/azure/) command to retrieve the API key from the search service:
|
|
80
80
|
|
|
@@ -100,7 +100,7 @@ const {
|
|
|
100
100
|
const searchClient = new SearchClient(
|
|
101
101
|
"<endpoint>",
|
|
102
102
|
"<indexName>",
|
|
103
|
-
new AzureKeyCredential("<apiKey>")
|
|
103
|
+
new AzureKeyCredential("<apiKey>"),
|
|
104
104
|
);
|
|
105
105
|
|
|
106
106
|
// To manage indexes and synonymmaps
|
|
@@ -112,7 +112,7 @@ const indexerClient = new SearchIndexerClient("<endpoint>", new AzureKeyCredenti
|
|
|
112
112
|
|
|
113
113
|
### Authenticate in a National Cloud
|
|
114
114
|
|
|
115
|
-
To authenticate in a [National Cloud](https://
|
|
115
|
+
To authenticate in a [National Cloud](https://learn.microsoft.com/azure/active-directory/develop/authentication-national-cloud), you will need to make the following additions to your client configuration:
|
|
116
116
|
|
|
117
117
|
- Set the `Audience` in `SearchClientOptions`
|
|
118
118
|
|
|
@@ -132,7 +132,7 @@ const searchClient = new SearchClient(
|
|
|
132
132
|
new AzureKeyCredential("<apiKey>"),
|
|
133
133
|
{
|
|
134
134
|
audience: KnownSearchAudience.AzureChina,
|
|
135
|
-
}
|
|
135
|
+
},
|
|
136
136
|
);
|
|
137
137
|
|
|
138
138
|
// To manage indexes and synonymmaps
|
|
@@ -153,24 +153,24 @@ exposes operations on these resources through three main client types.
|
|
|
153
153
|
|
|
154
154
|
- `SearchClient` helps with:
|
|
155
155
|
|
|
156
|
-
- [Searching](https://
|
|
156
|
+
- [Searching](https://learn.microsoft.com/azure/search/search-lucene-query-architecture)
|
|
157
157
|
your indexed documents using [vector queries](https://learn.microsoft.com/azure/search/vector-search-how-to-query),
|
|
158
158
|
[keyword queries](https://learn.microsoft.com/azure/search/search-query-create)
|
|
159
159
|
and [hybrid queries](https://learn.microsoft.com/azure/search/hybrid-search-how-to-query)
|
|
160
160
|
- [Vector query filters](https://learn.microsoft.com/azure/search/vector-search-filters) and [Text query filters](https://learn.microsoft.com/azure/search/search-filters)
|
|
161
161
|
- [Semantic ranking](https://learn.microsoft.com/azure/search/semantic-how-to-query-request) and [scoring profiles](https://learn.microsoft.com/azure/search/index-add-scoring-profiles) for boosting relevance
|
|
162
|
-
- [Autocompleting](https://
|
|
163
|
-
- [Suggesting](https://
|
|
164
|
-
- [Adding, Updating or Deleting Documents](https://
|
|
162
|
+
- [Autocompleting](https://learn.microsoft.com/rest/api/searchservice/autocomplete) partially typed search terms based on documents in the index
|
|
163
|
+
- [Suggesting](https://learn.microsoft.com/rest/api/searchservice/suggestions) the most likely matching text in documents as a user types
|
|
164
|
+
- [Adding, Updating or Deleting Documents](https://learn.microsoft.com/rest/api/searchservice/addupdate-or-delete-documents) documents from an index
|
|
165
165
|
|
|
166
166
|
- `SearchIndexClient` allows you to:
|
|
167
167
|
|
|
168
|
-
- [Create, delete, update, or configure a search index](https://
|
|
169
|
-
- [Declare custom synonym maps to expand or rewrite queries](https://
|
|
168
|
+
- [Create, delete, update, or configure a search index](https://learn.microsoft.com/rest/api/searchservice/index-operations)
|
|
169
|
+
- [Declare custom synonym maps to expand or rewrite queries](https://learn.microsoft.com/rest/api/searchservice/synonym-map-operations)
|
|
170
170
|
|
|
171
171
|
- `SearchIndexerClient` allows you to:
|
|
172
|
-
- [Start indexers to automatically crawl data sources](https://
|
|
173
|
-
- [Define AI powered Skillsets to transform and enrich your data](https://
|
|
172
|
+
- [Start indexers to automatically crawl data sources](https://learn.microsoft.com/rest/api/searchservice/indexer-operations)
|
|
173
|
+
- [Define AI powered Skillsets to transform and enrich your data](https://learn.microsoft.com/rest/api/searchservice/skillset-operations)
|
|
174
174
|
|
|
175
175
|
**Note**: These clients cannot function in the browser because the APIs it calls do not have support for Cross-Origin Resource Sharing (CORS).
|
|
176
176
|
|
|
@@ -182,11 +182,11 @@ An item stored inside a search index. The shape of this document is described in
|
|
|
182
182
|
|
|
183
183
|
### Pagination
|
|
184
184
|
|
|
185
|
-
Typically you will only wish to [show a subset of search results](https://
|
|
185
|
+
Typically you will only wish to [show a subset of search results](https://learn.microsoft.com/azure/search/search-pagination-page-layout#total-hits-and-page-counts) to a user at one time. To support this, you can use the `top`, `skip` and `includeTotalCount` parameters to provide a paged experience on top of search results.
|
|
186
186
|
|
|
187
187
|
### Document field encoding
|
|
188
188
|
|
|
189
|
-
[Supported data types](https://
|
|
189
|
+
[Supported data types](https://learn.microsoft.com/rest/api/searchservice/Supported-data-types) in an index are mapped to JSON types in API requests/responses. The JS client library keeps these mostly the same, with some exceptions:
|
|
190
190
|
|
|
191
191
|
- `Edm.DateTimeOffset` is converted to a JS `Date`.
|
|
192
192
|
- `Edm.GeographyPoint` is converted to a `GeographyPoint` type exported by the client library.
|
|
@@ -302,7 +302,7 @@ main();
|
|
|
302
302
|
|
|
303
303
|
### Perform a search on documents
|
|
304
304
|
|
|
305
|
-
To list all results of a particular query, you can use `search` with a search string that uses [simple query syntax](https://
|
|
305
|
+
To list all results of a particular query, you can use `search` with a search string that uses [simple query syntax](https://learn.microsoft.com/azure/search/query-simple-syntax):
|
|
306
306
|
|
|
307
307
|
```js
|
|
308
308
|
const { SearchClient, AzureKeyCredential } = require("@azure/search-documents");
|
|
@@ -319,7 +319,7 @@ async function main() {
|
|
|
319
319
|
main();
|
|
320
320
|
```
|
|
321
321
|
|
|
322
|
-
For a more advanced search that uses [Lucene syntax](https://
|
|
322
|
+
For a more advanced search that uses [Lucene syntax](https://learn.microsoft.com/azure/search/query-lucene-syntax), specify `queryType` to be `full`:
|
|
323
323
|
|
|
324
324
|
```js
|
|
325
325
|
const { SearchClient, AzureKeyCredential } = require("@azure/search-documents");
|
|
@@ -364,7 +364,7 @@ interface Hotel {
|
|
|
364
364
|
const client = new SearchClient<Hotel>(
|
|
365
365
|
"<endpoint>",
|
|
366
366
|
"<indexName>",
|
|
367
|
-
new AzureKeyCredential("<apiKey>")
|
|
367
|
+
new AzureKeyCredential("<apiKey>"),
|
|
368
368
|
);
|
|
369
369
|
|
|
370
370
|
async function main() {
|
|
@@ -395,7 +395,7 @@ main();
|
|
|
395
395
|
|
|
396
396
|
#### Querying with OData filters
|
|
397
397
|
|
|
398
|
-
Using the `filter` query parameter allows you to query an index using the syntax of an [OData \$filter expression](https://
|
|
398
|
+
Using the `filter` query parameter allows you to query an index using the syntax of an [OData \$filter expression](https://learn.microsoft.com/azure/search/search-query-odata-filter).
|
|
399
399
|
|
|
400
400
|
```js
|
|
401
401
|
const { SearchClient, AzureKeyCredential, odata } = require("@azure/search-documents");
|
|
@@ -430,11 +430,13 @@ const { SearchClient, AzureKeyCredential } = require("@azure/search-documents");
|
|
|
430
430
|
const searchClient = new SearchClient(
|
|
431
431
|
"<endpoint>",
|
|
432
432
|
"<indexName>",
|
|
433
|
-
new AzureKeyCredential("<apiKey>")
|
|
433
|
+
new AzureKeyCredential("<apiKey>"),
|
|
434
434
|
);
|
|
435
435
|
|
|
436
436
|
async function main() {
|
|
437
|
-
const queryVector = [
|
|
437
|
+
const queryVector = [
|
|
438
|
+
/*...*/
|
|
439
|
+
];
|
|
438
440
|
const searchResults = await searchClient.search("*", {
|
|
439
441
|
vectorSearchOptions: {
|
|
440
442
|
queries: [
|
|
@@ -458,7 +460,7 @@ main();
|
|
|
458
460
|
|
|
459
461
|
#### Querying with facets
|
|
460
462
|
|
|
461
|
-
[Facets](https://
|
|
463
|
+
[Facets](https://learn.microsoft.com/azure/search/search-filters-facets) are used to help a user of your application refine a search along pre-configured dimensions. [Facet syntax](https://learn.microsoft.com/rest/api/searchservice/search-documents#facetstring-zero-or-more) provides the options to sort and bucket facet values.
|
|
462
464
|
|
|
463
465
|
```js
|
|
464
466
|
const { SearchClient, AzureKeyCredential } = require("@azure/search-documents");
|
|
@@ -507,7 +509,7 @@ For more detailed instructions on how to enable logs, you can look at the [@azur
|
|
|
507
509
|
## Next steps
|
|
508
510
|
|
|
509
511
|
- [Go further with search-documents and our samples](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/search/search-documents/samples)
|
|
510
|
-
- [Read more about the Azure AI Search service](https://
|
|
512
|
+
- [Read more about the Azure AI Search service](https://learn.microsoft.com/azure/search/search-what-is-azure-search)
|
|
511
513
|
|
|
512
514
|
## Contributing
|
|
513
515
|
|
|
@@ -521,16 +523,16 @@ This project has adopted the [Microsoft Open Source Code of Conduct][coc]. For m
|
|
|
521
523
|
|
|
522
524
|
- [Microsoft Azure SDK for JavaScript](https://github.com/Azure/azure-sdk-for-js)
|
|
523
525
|
|
|
524
|
-

|
|
525
526
|
|
|
526
|
-
|
|
527
|
+
|
|
528
|
+
[azure_cli]: https://learn.microsoft.com/cli/azure
|
|
527
529
|
[azure_sub]: https://azure.microsoft.com/free/
|
|
528
|
-
[search_resource]: https://
|
|
530
|
+
[search_resource]: https://learn.microsoft.com/azure/search/search-create-service-portal
|
|
529
531
|
[azure_portal]: https://portal.azure.com
|
|
530
|
-
[cognitive_auth]: https://
|
|
531
|
-
[create_search_service_docs]: https://
|
|
532
|
-
[create_search_service_ps]: https://
|
|
533
|
-
[create_search_service_cli]: https://
|
|
532
|
+
[cognitive_auth]: https://learn.microsoft.com/azure/cognitive-services/authentication
|
|
533
|
+
[create_search_service_docs]: https://learn.microsoft.com/azure/search/search-create-service-portal
|
|
534
|
+
[create_search_service_ps]: https://learn.microsoft.com/azure/search/search-manage-powershell#create-or-delete-a-service
|
|
535
|
+
[create_search_service_cli]: https://learn.microsoft.com/cli/azure/search/service?view=azure-cli-latest#az-search-service-create
|
|
534
536
|
[cla]: https://cla.microsoft.com
|
|
535
537
|
[coc]: https://opensource.microsoft.com/codeofconduct/
|
|
536
538
|
[coc_faq]: https://opensource.microsoft.com/codeofconduct/faq/
|
|
@@ -16,13 +16,13 @@ export declare class IndexDocumentsBatch<TModel> {
|
|
|
16
16
|
upload(documents: TModel[]): void;
|
|
17
17
|
/**
|
|
18
18
|
* Update a set of documents in the index.
|
|
19
|
-
* For more details about how merging works, see https://
|
|
19
|
+
* For more details about how merging works, see https://learn.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents
|
|
20
20
|
* @param documents - The updated documents.
|
|
21
21
|
*/
|
|
22
22
|
merge(documents: TModel[]): void;
|
|
23
23
|
/**
|
|
24
24
|
* Update a set of documents in the index or uploads them if they don't exist.
|
|
25
|
-
* For more details about how merging works, see https://
|
|
25
|
+
* For more details about how merging works, see https://learn.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents
|
|
26
26
|
* @param documents - The new/updated documents.
|
|
27
27
|
*/
|
|
28
28
|
mergeOrUpload(documents: TModel[]): void;
|
|
@@ -20,7 +20,7 @@ export class IndexDocumentsBatch {
|
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
22
|
* Update a set of documents in the index.
|
|
23
|
-
* For more details about how merging works, see https://
|
|
23
|
+
* For more details about how merging works, see https://learn.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents
|
|
24
24
|
* @param documents - The updated documents.
|
|
25
25
|
*/
|
|
26
26
|
merge(documents) {
|
|
@@ -31,7 +31,7 @@ export class IndexDocumentsBatch {
|
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
33
33
|
* Update a set of documents in the index or uploads them if they don't exist.
|
|
34
|
-
* For more details about how merging works, see https://
|
|
34
|
+
* For more details about how merging works, see https://learn.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents
|
|
35
35
|
* @param documents - The new/updated documents.
|
|
36
36
|
*/
|
|
37
37
|
mergeOrUpload(documents) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexDocumentsBatch.js","sourceRoot":"","sources":["../../src/indexDocumentsBatch.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC;;;GAGG;AACH,MAAM,OAAO,mBAAmB;IAM9B,YAAY,UAA0C,EAAE;QACtD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,SAAmB;QAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAA+B,CAAC,GAAG,EAAE,EAAE;YAChE,uCACK,GAAG,KACN,YAAY,EAAE,QAAQ,IACtB;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,SAAmB;QAC9B,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAA+B,CAAC,GAAG,EAAE,EAAE;YAChE,uCACK,GAAG,KACN,YAAY,EAAE,OAAO,IACrB;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACI,aAAa,CAAC,SAAmB;QACtC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAA+B,CAAC,GAAG,EAAE,EAAE;YAChE,uCACK,GAAG,KACN,YAAY,EAAE,eAAe,IAC7B;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IAC9B,CAAC;IAeM,MAAM,CAAC,kBAA2C,EAAE,SAAoB;QAC7E,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,kBAAkC,CAAC;YAEnD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAA+B,CAAC,QAAQ,EAAE,EAAE;gBACrE,OAAO;oBACL,YAAY,EAAE,QAAQ;oBACtB,CAAC,OAAO,CAAC,EAAE,QAAQ;iBACY,CAAC;YACpC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,kBAA8B,CAAC;YAEjD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAA+B,CAAC,QAAQ,EAAE,EAAE;gBACrE,OAAO,gBACL,YAAY,EAAE,QAAQ,IACnB,QAAQ,CACoB,CAAC;YACpC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { IndexDocumentsAction } from \"./indexModels.js\";\n\n/**\n * Class used to perform batch operations\n * with multiple documents to the index.\n */\nexport class IndexDocumentsBatch<TModel> {\n /**\n * The set of actions taken in this batch.\n */\n public readonly actions: IndexDocumentsAction<TModel>[];\n\n constructor(actions: IndexDocumentsAction<TModel>[] = []) {\n this.actions = actions;\n }\n\n /**\n * Upload an array of documents to the index.\n * @param documents - The documents to upload.\n */\n public upload(documents: TModel[]): void {\n const batch = documents.map<IndexDocumentsAction<TModel>>((doc) => {\n return {\n ...doc,\n __actionType: \"upload\",\n };\n });\n\n this.actions.push(...batch);\n }\n\n /**\n * Update a set of documents in the index.\n * For more details about how merging works, see https://
|
|
1
|
+
{"version":3,"file":"indexDocumentsBatch.js","sourceRoot":"","sources":["../../src/indexDocumentsBatch.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC;;;GAGG;AACH,MAAM,OAAO,mBAAmB;IAM9B,YAAY,UAA0C,EAAE;QACtD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,SAAmB;QAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAA+B,CAAC,GAAG,EAAE,EAAE;YAChE,uCACK,GAAG,KACN,YAAY,EAAE,QAAQ,IACtB;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,SAAmB;QAC9B,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAA+B,CAAC,GAAG,EAAE,EAAE;YAChE,uCACK,GAAG,KACN,YAAY,EAAE,OAAO,IACrB;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACI,aAAa,CAAC,SAAmB;QACtC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAA+B,CAAC,GAAG,EAAE,EAAE;YAChE,uCACK,GAAG,KACN,YAAY,EAAE,eAAe,IAC7B;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IAC9B,CAAC;IAeM,MAAM,CAAC,kBAA2C,EAAE,SAAoB;QAC7E,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,kBAAkC,CAAC;YAEnD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAA+B,CAAC,QAAQ,EAAE,EAAE;gBACrE,OAAO;oBACL,YAAY,EAAE,QAAQ;oBACtB,CAAC,OAAO,CAAC,EAAE,QAAQ;iBACY,CAAC;YACpC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,kBAA8B,CAAC;YAEjD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAA+B,CAAC,QAAQ,EAAE,EAAE;gBACrE,OAAO,gBACL,YAAY,EAAE,QAAQ,IACnB,QAAQ,CACoB,CAAC;YACpC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { IndexDocumentsAction } from \"./indexModels.js\";\n\n/**\n * Class used to perform batch operations\n * with multiple documents to the index.\n */\nexport class IndexDocumentsBatch<TModel> {\n /**\n * The set of actions taken in this batch.\n */\n public readonly actions: IndexDocumentsAction<TModel>[];\n\n constructor(actions: IndexDocumentsAction<TModel>[] = []) {\n this.actions = actions;\n }\n\n /**\n * Upload an array of documents to the index.\n * @param documents - The documents to upload.\n */\n public upload(documents: TModel[]): void {\n const batch = documents.map<IndexDocumentsAction<TModel>>((doc) => {\n return {\n ...doc,\n __actionType: \"upload\",\n };\n });\n\n this.actions.push(...batch);\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/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents\n * @param documents - The updated documents.\n */\n public merge(documents: TModel[]): void {\n const batch = documents.map<IndexDocumentsAction<TModel>>((doc) => {\n return {\n ...doc,\n __actionType: \"merge\",\n };\n });\n\n this.actions.push(...batch);\n }\n\n /**\n * Update a set of documents in the index or uploads them if they don't exist.\n * For more details about how merging works, see https://learn.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents\n * @param documents - The new/updated documents.\n */\n public mergeOrUpload(documents: TModel[]): void {\n const batch = documents.map<IndexDocumentsAction<TModel>>((doc) => {\n return {\n ...doc,\n __actionType: \"mergeOrUpload\",\n };\n });\n\n this.actions.push(...batch);\n }\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 */\n public delete(keyName: keyof TModel, keyValues: string[]): void;\n\n /**\n * Delete a set of documents.\n * @param documents - Documents to be deleted.\n */\n public delete(documents: TModel[]): void;\n\n public delete(keyNameOrDocuments: keyof TModel | TModel[], keyValues?: string[]): void {\n if (keyValues) {\n const keyName = keyNameOrDocuments as keyof TModel;\n\n const batch = keyValues.map<IndexDocumentsAction<TModel>>((keyValue) => {\n return {\n __actionType: \"delete\",\n [keyName]: keyValue,\n } as IndexDocumentsAction<TModel>;\n });\n\n this.actions.push(...batch);\n } else {\n const documents = keyNameOrDocuments as TModel[];\n\n const batch = documents.map<IndexDocumentsAction<TModel>>((document) => {\n return {\n __actionType: \"delete\",\n ...document,\n } as IndexDocumentsAction<TModel>;\n });\n\n this.actions.push(...batch);\n }\n }\n}\n"]}
|
package/dist/browser/odata.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* const ratingMin = 4;
|
|
7
7
|
* const filter = odata`Rooms/any(room: room/BaseRate lt ${baseRateMax}) and Rating ge ${ratingMin}`;
|
|
8
8
|
* ```
|
|
9
|
-
* For more information on supported syntax see: https://
|
|
9
|
+
* For more information on supported syntax see: https://learn.microsoft.com/en-us/azure/search/search-query-odata-filter
|
|
10
10
|
* @param strings - Array of strings for the expression
|
|
11
11
|
* @param values - Array of values for the expression
|
|
12
12
|
*/
|
package/dist/browser/odata.js
CHANGED
|
@@ -25,7 +25,7 @@ function escapeQuotesIfString(input, previous) {
|
|
|
25
25
|
* const ratingMin = 4;
|
|
26
26
|
* const filter = odata`Rooms/any(room: room/BaseRate lt ${baseRateMax}) and Rating ge ${ratingMin}`;
|
|
27
27
|
* ```
|
|
28
|
-
* For more information on supported syntax see: https://
|
|
28
|
+
* For more information on supported syntax see: https://learn.microsoft.com/en-us/azure/search/search-query-odata-filter
|
|
29
29
|
* @param strings - Array of strings for the expression
|
|
30
30
|
* @param values - Array of values for the expression
|
|
31
31
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odata.js","sourceRoot":"","sources":["../../src/odata.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,SAAS,sBAAsB,CAAC,KAAc;IAC5C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc,EAAE,QAAgB;IAC5D,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACnC,0CAA0C;QAC1C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,GAAG,IAAI,MAAM,GAAG,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,KAAK,CAAC,OAA6B,EAAE,GAAG,MAAiB;IACvE,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAClD,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nfunction formatNullAndUndefined(input: unknown): string | unknown {\n if (input === null || input === undefined) {\n return \"null\";\n }\n\n return input;\n}\n\nfunction escapeQuotesIfString(input: unknown, previous: string): string | unknown {\n let result = input;\n\n if (typeof input === \"string\") {\n result = input.replace(/'/g, \"''\");\n // check if we need to escape this literal\n if (!previous.trim().endsWith(\"'\")) {\n result = `'${result}'`;\n }\n }\n\n return result;\n}\n\n/**\n * Escapes an odata filter expression to avoid errors with quoting string literals.\n * Example usage:\n * ```ts\n * const baseRateMax = 200;\n * const ratingMin = 4;\n * const filter = odata`Rooms/any(room: room/BaseRate lt ${baseRateMax}) and Rating ge ${ratingMin}`;\n * ```\n * For more information on supported syntax see: https://
|
|
1
|
+
{"version":3,"file":"odata.js","sourceRoot":"","sources":["../../src/odata.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,SAAS,sBAAsB,CAAC,KAAc;IAC5C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc,EAAE,QAAgB;IAC5D,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACnC,0CAA0C;QAC1C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,GAAG,IAAI,MAAM,GAAG,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,KAAK,CAAC,OAA6B,EAAE,GAAG,MAAiB;IACvE,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAClD,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nfunction formatNullAndUndefined(input: unknown): string | unknown {\n if (input === null || input === undefined) {\n return \"null\";\n }\n\n return input;\n}\n\nfunction escapeQuotesIfString(input: unknown, previous: string): string | unknown {\n let result = input;\n\n if (typeof input === \"string\") {\n result = input.replace(/'/g, \"''\");\n // check if we need to escape this literal\n if (!previous.trim().endsWith(\"'\")) {\n result = `'${result}'`;\n }\n }\n\n return result;\n}\n\n/**\n * Escapes an odata filter expression to avoid errors with quoting string literals.\n * Example usage:\n * ```ts\n * const baseRateMax = 200;\n * const ratingMin = 4;\n * const filter = odata`Rooms/any(room: room/BaseRate lt ${baseRateMax}) and Rating ge ${ratingMin}`;\n * ```\n * For more information on supported syntax see: https://learn.microsoft.com/en-us/azure/search/search-query-odata-filter\n * @param strings - Array of strings for the expression\n * @param values - Array of values for the expression\n */\nexport function odata(strings: TemplateStringsArray, ...values: unknown[]): string {\n const results = [];\n for (let i = 0; i < strings.length; i++) {\n results.push(strings[i]);\n if (i < values.length) {\n if (values[i] === null || values[i] === undefined) {\n results.push(formatNullAndUndefined(values[i]));\n } else {\n results.push(escapeQuotesIfString(values[i], strings[i]));\n }\n }\n }\n return results.join(\"\");\n}\n"]}
|
|
@@ -220,7 +220,7 @@ export declare class SearchClient<TModel extends object> implements IndexDocumen
|
|
|
220
220
|
* This operation may partially succeed and not all document operations will
|
|
221
221
|
* be reflected in the index. If you would like to treat this as an exception,
|
|
222
222
|
* set the `throwOnAnyFailure` option to true.
|
|
223
|
-
* For more details about how merging works, see: https://
|
|
223
|
+
* For more details about how merging works, see: https://learn.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents
|
|
224
224
|
* @param batch - An array of actions to perform on the index.
|
|
225
225
|
* @param options - Additional options.
|
|
226
226
|
*/
|
|
@@ -233,14 +233,14 @@ export declare class SearchClient<TModel extends object> implements IndexDocumen
|
|
|
233
233
|
uploadDocuments(documents: TModel[], options?: UploadDocumentsOptions): Promise<IndexDocumentsResult>;
|
|
234
234
|
/**
|
|
235
235
|
* Update a set of documents in the index.
|
|
236
|
-
* For more details about how merging works, see https://
|
|
236
|
+
* For more details about how merging works, see https://learn.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents
|
|
237
237
|
* @param documents - The updated documents.
|
|
238
238
|
* @param options - Additional options.
|
|
239
239
|
*/
|
|
240
240
|
mergeDocuments(documents: TModel[], options?: MergeDocumentsOptions): Promise<IndexDocumentsResult>;
|
|
241
241
|
/**
|
|
242
242
|
* Update a set of documents in the index or upload them if they don't exist.
|
|
243
|
-
* For more details about how merging works, see https://
|
|
243
|
+
* For more details about how merging works, see https://learn.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents
|
|
244
244
|
* @param documents - The updated documents.
|
|
245
245
|
* @param options - Additional options.
|
|
246
246
|
*/
|
|
@@ -403,7 +403,7 @@ export class SearchClient {
|
|
|
403
403
|
* This operation may partially succeed and not all document operations will
|
|
404
404
|
* be reflected in the index. If you would like to treat this as an exception,
|
|
405
405
|
* set the `throwOnAnyFailure` option to true.
|
|
406
|
-
* For more details about how merging works, see: https://
|
|
406
|
+
* For more details about how merging works, see: https://learn.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents
|
|
407
407
|
* @param batch - An array of actions to perform on the index.
|
|
408
408
|
* @param options - Additional options.
|
|
409
409
|
*/
|
|
@@ -460,7 +460,7 @@ export class SearchClient {
|
|
|
460
460
|
}
|
|
461
461
|
/**
|
|
462
462
|
* Update a set of documents in the index.
|
|
463
|
-
* For more details about how merging works, see https://
|
|
463
|
+
* For more details about how merging works, see https://learn.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents
|
|
464
464
|
* @param documents - The updated documents.
|
|
465
465
|
* @param options - Additional options.
|
|
466
466
|
*/
|
|
@@ -484,7 +484,7 @@ export class SearchClient {
|
|
|
484
484
|
}
|
|
485
485
|
/**
|
|
486
486
|
* Update a set of documents in the index or upload them if they don't exist.
|
|
487
|
-
* For more details about how merging works, see https://
|
|
487
|
+
* For more details about how merging works, see https://learn.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents
|
|
488
488
|
* @param documents - The updated documents.
|
|
489
489
|
* @param options - Additional options.
|
|
490
490
|
*/
|
|
@@ -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\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 *\n * Optionally, the type of the model can be used to enable strong typing and type hints:\n * ```ts\n * type TModel = {\n * keyName: string;\n * field1?: string | null;\n * field2?: { anotherField?: string | null } | null;\n * };\n *\n * const client = new SearchClient<TModel>(\n * ...\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\n * import {\n * AzureKeyCredential,\n * SearchClient,\n * SearchFieldArray,\n * } from \"@azure/search-documents\";\n *\n * type TModel = {\n * key: string;\n * azure?: { sdk: string | null } | 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(\n * \"searchText\",\n * \"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\n * import {\n * AzureKeyCredential,\n * SearchClient,\n * SearchFieldArray,\n * } from \"@azure/search-documents\";\n *\n * type TModel = {\n * key: string;\n * azure?: { sdk: string | null } | 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\n * import {\n * AzureKeyCredential,\n * SearchClient,\n * SearchFieldArray,\n * } from \"@azure/search-documents\";\n *\n * type TModel = {\n * key: string;\n * azure?: { sdk: string | null } | 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://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<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://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: 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://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: 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\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 *\n * Optionally, the type of the model can be used to enable strong typing and type hints:\n * ```ts\n * type TModel = {\n * keyName: string;\n * field1?: string | null;\n * field2?: { anotherField?: string | null } | null;\n * };\n *\n * const client = new SearchClient<TModel>(\n * ...\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\n * import {\n * AzureKeyCredential,\n * SearchClient,\n * SearchFieldArray,\n * } from \"@azure/search-documents\";\n *\n * type TModel = {\n * key: string;\n * azure?: { sdk: string | null } | 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(\n * \"searchText\",\n * \"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\n * import {\n * AzureKeyCredential,\n * SearchClient,\n * SearchFieldArray,\n * } from \"@azure/search-documents\";\n *\n * type TModel = {\n * key: string;\n * azure?: { sdk: string | null } | 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\n * import {\n * AzureKeyCredential,\n * SearchClient,\n * SearchFieldArray,\n * } from \"@azure/search-documents\";\n *\n * type TModel = {\n * key: string;\n * azure?: { sdk: string | null } | 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/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<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/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: 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/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: 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"]}
|