diff --git a/persistence/playlist_repository.go b/persistence/playlist_repository.go
index 360e3914f..5f780206e 100644
--- a/persistence/playlist_repository.go
+++ b/persistence/playlist_repository.go
@@ -30,9 +30,19 @@ func NewPlaylistRepository(ctx context.Context, o orm.Ormer) model.PlaylistRepos
 	r.ctx = ctx
 	r.ormer = o
 	r.tableName = "playlist"
+	r.filterMappings = map[string]filterFunc{
+		"q": playlistFilter,
+	}
 	return r
 }
 
+func playlistFilter(field string, value interface{}) Sqlizer {
+	return Or{
+		substringFilter("name", value),
+		substringFilter("comment", value),
+	}
+}
+
 func (r *playlistRepository) userFilter() Sqlizer {
 	user := loggedUser(r.ctx)
 	if user.IsAdmin {
diff --git a/persistence/sql_restful.go b/persistence/sql_restful.go
index dc4a62da9..d04048312 100644
--- a/persistence/sql_restful.go
+++ b/persistence/sql_restful.go
@@ -68,6 +68,15 @@ func fullTextFilter(field string, value interface{}) Sqlizer {
 	return fullTextExpr(value.(string))
 }
 
+func substringFilter(field string, value interface{}) Sqlizer {
+	parts := strings.Split(value.(string), " ")
+	filters := And{}
+	for _, part := range parts {
+		filters = append(filters, Like{field: "%" + part + "%"})
+	}
+	return filters
+}
+
 func idFilter(tableName string) func(string, interface{}) Sqlizer {
 	return func(field string, value interface{}) Sqlizer {
 		return Eq{tableName + ".id": value}
diff --git a/ui/src/playlist/PlaylistList.js b/ui/src/playlist/PlaylistList.js
index dcad5c5b6..33446a212 100644
--- a/ui/src/playlist/PlaylistList.js
+++ b/ui/src/playlist/PlaylistList.js
@@ -26,7 +26,7 @@ import PlaylistListActions from './PlaylistListActions'
 
 const PlaylistFilter = (props) => (
   <Filter {...props} variant={'outlined'}>
-    <SearchInput source="name" alwaysOn />
+    <SearchInput source="q" alwaysOn />
   </Filter>
 )