diff --git a/search/document_store.go b/search/document_store.go index 581670324dfd32bfe6faee4547aa49eb9e754795..3e4c440d4c74116fcd106391939580f5ba80277d 100644 --- a/search/document_store.go +++ b/search/document_store.go @@ -26,8 +26,11 @@ type DocumentStore struct { } // NewDocumentStore purpose: +// // create a document store index to write e.g. orders then allow one to search them +// // parameters: +// // name must be the complete openSearch index name e.g. "uafrica-v3-orders" // tmpl must be your document data struct consisting of public fields as: // Xxx string `json:"<name>" search:"keyword|text|long|date"` (can later add more types) @@ -141,6 +144,7 @@ func (ds *DocumentStore) Write(id string, data interface{}) error { // Search // Return: +// // docs will be a slice of the DocumentStore data type func (ds *DocumentStore) Search(query Query, limit int64) (res *SearchResponseHits, err error) { if ds == nil { @@ -242,15 +246,23 @@ func (ds *DocumentStore) Delete(id string) (err error) { if ds == nil { return errors.Errorf("document store == nil") } + + var delResponse *opensearchapi.Response + + defer func() { + if delResponse != nil && delResponse.Body != nil { + delResponse.Body.Close() + } + }() + del := opensearchapi.DeleteRequest{ Index: ds.name, DocumentType: "_doc", DocumentID: id, } - delResponse, err := del.Do(context.Background(), ds.w.client) + delResponse, err = del.Do(context.Background(), ds.w.client) if err != nil { - err = errors.Wrapf(err, "failed to del document") - return + return errors.Wrapf(err, "failed to del document") } switch delResponse.StatusCode { @@ -259,8 +271,8 @@ func (ds *DocumentStore) Delete(id string) (err error) { case http.StatusNoContent: default: resBody, _ := ioutil.ReadAll(delResponse.Body) - err = errors.Errorf("Del failed with HTTP status %v: %s", delResponse.StatusCode, string(resBody)) - return + return errors.Errorf("Del failed with HTTP status %v: %s", delResponse.StatusCode, string(resBody)) } + return nil }