Skip to content

Commit

Permalink
[esutil.Client] added routing support for MultiSearch (#94)
Browse files Browse the repository at this point in the history
  • Loading branch information
mrparkers committed Jun 29, 2021
1 parent 19949cc commit 96c0c8a
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 2 deletions.
4 changes: 3 additions & 1 deletion go/v1beta1/storage/esutil/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ type BulkRequestItem struct {

type MultiSearchRequest struct {
Index string
Routing string
Searches []*EsSearch
}

Expand Down Expand Up @@ -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')

Expand Down
33 changes: 33 additions & 0 deletions go/v1beta1/storage/esutil/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand All @@ -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() {
Expand Down
3 changes: 2 additions & 1 deletion go/v1beta1/storage/esutil/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 96c0c8a

Please sign in to comment.