diff --git a/src/api/types.ts b/src/api/types.ts index cf5c76cfd..bebd0398c 100644 --- a/src/api/types.ts +++ b/src/api/types.ts @@ -702,13 +702,13 @@ export interface MgetResponse { export type MgetResponseItem = GetGetResult | MgetMultiGetError -export interface MsearchMultiSearchItem extends SearchResponseBody { +export interface MsearchMultiSearchItem> extends SearchResponseBody { status?: integer } -export interface MsearchMultiSearchResult { +export interface MsearchMultiSearchResult> { took: long - responses: MsearchResponseItem[] + responses: MsearchResponseItem[] } export interface MsearchMultisearchBody { @@ -779,9 +779,9 @@ export interface MsearchRequest extends RequestBase { export type MsearchRequestItem = MsearchMultisearchHeader | MsearchMultisearchBody -export type MsearchResponse> = MsearchMultiSearchResult +export type MsearchResponse> = MsearchMultiSearchResult -export type MsearchResponseItem = MsearchMultiSearchItem | ErrorResponseBase +export type MsearchResponseItem> = MsearchMultiSearchItem | ErrorResponseBase export interface MsearchTemplateRequest extends RequestBase { index?: Indices diff --git a/test/unit/api.test.ts b/test/unit/api.test.ts index 80b3a1f7f..01416e66c 100644 --- a/test/unit/api.test.ts +++ b/test/unit/api.test.ts @@ -300,3 +300,66 @@ test('With generic document and aggregation', async t => { t.ok(Array.isArray(response.aggregations?.unique.buckets)) }) +test('With generic document and aggregation for multi search', async t => { + t.plan(1) + + interface Doc { + foo: string + } + + interface Aggregations { + unique: T.AggregationsTermsAggregateBase<{ key: string }> + } + + const Connection = connection.buildMockConnection({ + onRequest (opts) { + return { + statusCode: 200, + body: { + responses: [{ + took: 42, + hits: { + hits: [{ + _source: { foo: 'bar' } + }] + }, + aggregations: { + unique: { + buckets: [{ key: 'bar' }] + } + } + }] + } + } + } + }) + + const client = new Client({ + node: 'http://localhost:9200', + Connection + }) + + const response = await client.msearch({ + index: 'test', + searches: [ + {}, + { + allow_no_indices: true, + query: { match_all: {} }, + aggregations: { + unique: { + terms: { + field: 'foo' + } + } + } + } + ] + }) + + response.responses.forEach((r) => { + if ("error" in r) return + t.ok(Array.isArray(r.aggregations?.unique.buckets)) + }) +}) +