Skip to content

Commit

Permalink
feat: enable empty text search
Browse files Browse the repository at this point in the history
  • Loading branch information
anjaliagg9791 committed Oct 4, 2023
1 parent ec9201e commit 3f7d0a9
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 16 deletions.
3 changes: 0 additions & 3 deletions internal/server/v1beta1/search.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,6 @@ func (server *APIServer) SearchAssets(ctx context.Context, req *compassv1beta1.S
}

text := strings.TrimSpace(req.GetText())
if text == "" {
return nil, status.Error(codes.InvalidArgument, "'text' must be specified")
}

cfg := asset.SearchConfig{
Text: text,
Expand Down
5 changes: 0 additions & 5 deletions internal/server/v1beta1/search_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,6 @@ func TestSearch(t *testing.T) {
}

testCases := []testCase{
{
Description: "should return invalid argument if 'text' parameter is empty or missing",
ExpectStatus: codes.InvalidArgument,
Request: &compassv1beta1.SearchAssetsRequest{},
},
{
Description: "should report internal server if asset searcher fails",
Request: &compassv1beta1.SearchAssetsRequest{
Expand Down
14 changes: 8 additions & 6 deletions internal/store/elasticsearch/discovery_search_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,6 @@ var returnedAssetFieldsResult = []string{"id", "urn", "type", "service", "name",

// Search the asset store
func (repo *DiscoveryRepository) Search(ctx context.Context, cfg asset.SearchConfig) (results []asset.SearchResult, err error) {
if strings.TrimSpace(cfg.Text) == "" {
return nil, asset.DiscoveryError{Op: "Search", Err: errors.New("search text cannot be empty")}
}
maxResults := cfg.MaxResults
if maxResults <= 0 {
maxResults = defaultMaxResults
Expand Down Expand Up @@ -233,6 +230,10 @@ func buildSuggestQuery(cfg asset.SearchConfig) (io.Reader, error) {
}

func buildTextQuery(q *elastic.BoolQuery, cfg asset.SearchConfig) {
if strings.TrimSpace(cfg.Text) == "" {
q.Should(elastic.NewMatchAllQuery())
}

boostedFields := []string{"urn^10", "name^5"}
q.Should(
// Phrase query cannot have `FUZZINESS`
Expand Down Expand Up @@ -305,12 +306,13 @@ func buildFilterExistsQueries(q *elastic.BoolQuery, fields []string) {

func buildFunctionScoreQuery(query elastic.Query, rankBy, text string) elastic.Query {
// Added exact match term query here so that exact match gets higher priority.
fsQuery := elastic.NewFunctionScoreQuery().
Add(
fsQuery := elastic.NewFunctionScoreQuery()
if text != "" {
fsQuery.Add(
elastic.NewTermQuery("name.keyword", text),
elastic.NewWeightFactorFunction(2),
)

}
if rankBy != "" {
fsQuery.AddScoreFunc(
elastic.NewFieldValueFactorFunction().
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ type searchTestData struct {

func TestSearcherSearch(t *testing.T) {
ctx := context.TODO()
t.Run("should return an error if search string is empty", func(t *testing.T) {
t.Run("should not return an error if search string is empty", func(t *testing.T) {
cli, err := esTestServer.NewClient()
require.NoError(t, err)
esClient, err := store.NewClient(
Expand All @@ -36,7 +36,7 @@ func TestSearcherSearch(t *testing.T) {
Text: "",
})

assert.Error(t, err)
assert.NoError(t, err)
})

t.Run("fixtures", func(t *testing.T) {
Expand Down

0 comments on commit 3f7d0a9

Please sign in to comment.