diff --git a/go/v1beta1/storage/esutil/client.go b/go/v1beta1/storage/esutil/client.go index 08cf14f..0d81985 100644 --- a/go/v1beta1/storage/esutil/client.go +++ b/go/v1beta1/storage/esutil/client.go @@ -63,6 +63,7 @@ type BulkRequestItem struct { type MultiSearchRequest struct { Index string + Routing string Searches []*EsSearch } @@ -388,7 +389,8 @@ func (c *client) MultiSearch(ctx context.Context, request *MultiSearchRequest) ( log := c.logger.Named("MultiSearch") searchMetadata, _ := json.Marshal(&EsMultiSearchQueryFragment{ - Index: request.Index, + Index: request.Index, + Routing: request.Routing, }) searchMetadata = append(searchMetadata, '\n') diff --git a/go/v1beta1/storage/esutil/client_test.go b/go/v1beta1/storage/esutil/client_test.go index 8f956cd..23db0fd 100644 --- a/go/v1beta1/storage/esutil/client_test.go +++ b/go/v1beta1/storage/esutil/client_test.go @@ -774,6 +774,7 @@ var _ = Describe("elasticsearch client", func() { if i%2 == 0 { // search metadata metadata := payload.(*EsMultiSearchQueryFragment) Expect(metadata.Index).To(Equal(expectedIndex)) + Expect(metadata.Routing).To(BeEmpty()) } else { // search search := payload.(*EsSearch) expectedSearch := expectedSearches[(i-1)/2] @@ -800,6 +801,38 @@ var _ = Describe("elasticsearch client", func() { Expect(actualErr).To(HaveOccurred()) }) }) + + When("routing is specified", func() { + var expectedRouting string + + BeforeEach(func() { + expectedRouting = fake.LetterN(10) + expectedMultiSearchRequest.Routing = expectedRouting + }) + + It("should include the routing value in each search header", func() { + var expectedPayloads []interface{} + + for i := 0; i < len(expectedSearches); i++ { + expectedPayloads = append(expectedPayloads, &EsMultiSearchQueryFragment{}, &EsSearch{}) + } + + parseNDJSONRequestBody(transport.ReceivedHttpRequests[0].Body, expectedPayloads) + + for i, payload := range expectedPayloads { + if i%2 == 0 { // search metadata + metadata := payload.(*EsMultiSearchQueryFragment) + Expect(metadata.Index).To(Equal(expectedIndex)) + Expect(metadata.Routing).To(Equal(expectedRouting)) + } else { // search + search := payload.(*EsSearch) + expectedSearch := expectedSearches[(i-1)/2] + + Expect(search).To(Equal(expectedSearch)) + } + } + }) + }) }) Context("Get", func() { diff --git a/go/v1beta1/storage/esutil/types.go b/go/v1beta1/storage/esutil/types.go index 472228e..05ee213 100644 --- a/go/v1beta1/storage/esutil/types.go +++ b/go/v1beta1/storage/esutil/types.go @@ -131,7 +131,8 @@ type EsBulkResponseItem struct { // Elasticsearch /_msearch query fragments type EsMultiSearchQueryFragment struct { - Index string `json:"index"` + Index string `json:"index"` + Routing string `json:"routing,omitempty"` } // Elasticsearch /_msearch response