diff --git a/search/document_store.go b/search/document_store.go index a8c8bd9295666be0be8320f1274659a0f1e462b6..bd5e4e32606b2f835d222c4f0ca5f08a88ace940 100644 --- a/search/document_store.go +++ b/search/document_store.go @@ -19,6 +19,7 @@ type DocumentStore interface { Write(id string, data interface{}) error Search(query Query, limit int64) (ids []string, totalCount int, err error) Get(id string) (doc interface{}, err error) + Delete(id string) error } type documentStore struct { @@ -283,3 +284,30 @@ func (ds *documentStore) Get(id string) (doc interface{}, err error) { } return source.Interface(), nil } + +func (ds *documentStore) Delete(id string) (err error) { + if ds == nil { + return errors.Errorf("document store == nil") + } + del := opensearchapi.DeleteRequest{ + Index: ds.name, + DocumentType: "_doc", + DocumentID: id, + } + delResponse, err := del.Do(context.Background(), ds.w.client) + if err != nil { + err = errors.Wrapf(err, "failed to del document") + return + } + + switch delResponse.StatusCode { + case http.StatusOK: + case http.StatusNotFound: + 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 nil +}