diff --git a/changelog/unreleased/polish-search.md b/changelog/unreleased/polish-search.md new file mode 100644 index 0000000000..5993a17795 --- /dev/null +++ b/changelog/unreleased/polish-search.md @@ -0,0 +1,5 @@ +Bugfix: Polish search + +We improved the feedback when providing invalid search queries and added support for limiting the number of results returned. + +https://github.com/owncloud/ocis/pull/4094 diff --git a/services/search/pkg/search/index/index.go b/services/search/pkg/search/index/index.go index 8ce98b18b7..7ad0107408 100644 --- a/services/search/pkg/search/index/index.go +++ b/services/search/pkg/search/index/index.go @@ -223,6 +223,9 @@ func (i *Index) Search(ctx context.Context, req *searchsvc.SearchIndexRequest) ( ) bleveReq := bleve.NewSearchRequest(query) bleveReq.Size = 200 + if req.PageSize > 0 { + bleveReq.Size = int(req.PageSize) + } bleveReq.Fields = []string{"*"} res, err := i.bleveIndex.Search(bleveReq) if err != nil { diff --git a/services/search/pkg/search/provider/searchprovider.go b/services/search/pkg/search/provider/searchprovider.go index 310909021f..d82c724639 100644 --- a/services/search/pkg/search/provider/searchprovider.go +++ b/services/search/pkg/search/provider/searchprovider.go @@ -67,7 +67,7 @@ func New(gwClient gateway.GatewayAPIClient, indexClient search.IndexClient, mach func (p *Provider) Search(ctx context.Context, req *searchsvc.SearchRequest) (*searchsvc.SearchResponse, error) { if req.Query == "" { - return nil, errtypes.PreconditionFailed("empty query provided") + return nil, errtypes.BadRequest("empty query provided") } p.logger.Debug().Str("query", req.Query).Msg("performing a search") @@ -144,6 +144,7 @@ func (p *Provider) Search(ctx context.Context, req *searchsvc.SearchRequest) (*s }, Path: mountpointPrefix, }, + PageSize: req.PageSize, }) if err != nil { p.logger.Error().Err(err).Str("space", space.Id.OpaqueId).Msg("failed to search the index") diff --git a/services/search/pkg/service/v0/service.go b/services/search/pkg/service/v0/service.go index d3fd24724a..9fd0da6d40 100644 --- a/services/search/pkg/service/v0/service.go +++ b/services/search/pkg/service/v0/service.go @@ -7,10 +7,12 @@ import ( "github.com/blevesearch/bleve/v2" revactx "github.com/cs3org/reva/v2/pkg/ctx" + "github.com/cs3org/reva/v2/pkg/errtypes" "github.com/cs3org/reva/v2/pkg/events" "github.com/cs3org/reva/v2/pkg/events/server" "github.com/cs3org/reva/v2/pkg/rgrpc/todo/pool" "github.com/go-micro/plugins/v4/events/natsjs" + merrors "go-micro.dev/v4/errors" "go-micro.dev/v4/metadata" grpcmetadata "google.golang.org/grpc/metadata" @@ -92,10 +94,16 @@ func (s Service) Search(ctx context.Context, in *searchsvc.SearchRequest, out *s ctx = grpcmetadata.AppendToOutgoingContext(ctx, revactx.TokenHeader, t) res, err := s.provider.Search(ctx, &searchsvc.SearchRequest{ - Query: in.Query, + Query: in.Query, + PageSize: in.PageSize, }) if err != nil { - return err + switch err.(type) { + case errtypes.BadRequest: + return merrors.BadRequest(s.id, err.Error()) + default: + return merrors.InternalServerError(s.id, err.Error()) + } } out.Matches = res.Matches diff --git a/services/webdav/pkg/service/v0/search.go b/services/webdav/pkg/service/v0/search.go index 7ba77db16f..084475ab93 100644 --- a/services/webdav/pkg/service/v0/search.go +++ b/services/webdav/pkg/service/v0/search.go @@ -44,7 +44,8 @@ func (g Webdav) Search(w http.ResponseWriter, r *http.Request) { ctx := revactx.ContextSetToken(r.Context(), t) ctx = metadata.Set(ctx, revactx.TokenHeader, t) rsp, err := g.searchClient.Search(ctx, &searchsvc.SearchRequest{ - Query: rep.SearchFiles.Search.Pattern, + Query: rep.SearchFiles.Search.Pattern, + PageSize: int32(rep.SearchFiles.Search.Limit), }) if err != nil { e := merrors.Parse(err.Error()) diff --git a/tests/acceptance/expected-failures-API-on-OCIS-storage.md b/tests/acceptance/expected-failures-API-on-OCIS-storage.md index 963e0f7c73..cc9d42b968 100644 --- a/tests/acceptance/expected-failures-API-on-OCIS-storage.md +++ b/tests/acceptance/expected-failures-API-on-OCIS-storage.md @@ -965,10 +965,6 @@ _ocdav: api compatibility, return correct status code_ - [apiWebdavOperations/search.feature:264](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L264) - [apiWebdavOperations/search.feature:270](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L270) -### [Different response status code while searching with empty pattern with new webdav](https://github.com/owncloud/ocis/issues/4016) - -- [apiWebdavOperations/search.feature:103](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L103) - ### [No permisions propertry in response while searching for files and folders on ocis with new webdav](https://github.com/owncloud/ocis/issues/4009) - [apiWebdavOperations/search.feature:208](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L208)