diff --git a/models/repo_list.go b/models/repo_list.go index c7e292d8a9..4368057e04 100644 --- a/models/repo_list.go +++ b/models/repo_list.go @@ -205,11 +205,14 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (RepositoryList, int64, err if opts.Keyword != "" { var keywordCond = builder.NewCond() - if opts.TopicOnly { - keywordCond = keywordCond.Or(builder.Like{"topic.name", strings.ToLower(opts.Keyword)}) - } else { - keywordCond = keywordCond.Or(builder.Like{"lower_name", strings.ToLower(opts.Keyword)}) - keywordCond = keywordCond.Or(builder.Like{"topic.name", strings.ToLower(opts.Keyword)}) + // separate keyword + for _, v := range strings.Split(opts.Keyword, ",") { + if opts.TopicOnly { + keywordCond = keywordCond.Or(builder.Like{"topic.name", strings.ToLower(v)}) + } else { + keywordCond = keywordCond.Or(builder.Like{"lower_name", strings.ToLower(v)}) + keywordCond = keywordCond.Or(builder.Like{"topic.name", strings.ToLower(v)}) + } } cond = cond.And(keywordCond) } diff --git a/models/repo_list_test.go b/models/repo_list_test.go index 8f4947dbb2..2f9a149188 100644 --- a/models/repo_list_test.go +++ b/models/repo_list_test.go @@ -237,6 +237,9 @@ func TestSearchRepositoryByTopicName(t *testing.T) { {name: "AllPublic/OnlySearchPublicRepositoriesFromTopic", opts: &SearchRepoOptions{OwnerID: 21, AllPublic: true, Keyword: "graphql", TopicOnly: true}, count: 1}, + {name: "AllPublic/OnlySearchMultipleKeywordPublicRepositoriesFromTopic", + opts: &SearchRepoOptions{OwnerID: 21, AllPublic: true, Keyword: "graphql,golang", TopicOnly: true}, + count: 3}, } for _, testCase := range testCases {