diff --git a/models/repo_list.go b/models/repo_list.go
index c7e292d8a..4368057e0 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 8f4947dbb..2f9a14918 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 {