diff --git a/lektor_nkdb/src/search/mod.rs b/lektor_nkdb/src/search/mod.rs
index 3aec9841de76eb3d2f3e6c045355eb262626c45c..cce5b95d2f676ec8e7aeee6630fa391609c2193a 100644
--- a/lektor_nkdb/src/search/mod.rs
+++ b/lektor_nkdb/src/search/mod.rs
@@ -56,6 +56,29 @@ impl SearchBy {
             _ => vec![],
         }
     }
+
+    /// A match function.
+    pub(crate) fn matches(&self, kara: &Kara) -> bool {
+        match &self {
+            SearchBy::Query(regex) => regex.is_match(&kara.to_title_string()),
+            SearchBy::Id(id) => kara.id.local_id().eq(id),
+            SearchBy::SongType(ty) => kara.song_type.eq(ty),
+            SearchBy::SongOrigin(ori) => kara.song_origin.eq(ori),
+            SearchBy::Author(author) => kara.kara_makers.contains(author.as_str()),
+            SearchBy::Tag((key, None)) => kara.tags.contains_key(key.as_str()),
+            SearchBy::Tag((key, Some(value))) => kara
+                .tags
+                .get(key.as_str())
+                .map(|v| v.iter().any(|v| v.as_ref().eq(value.as_str())))
+                .unwrap_or_default(),
+
+            // Recursive thing to apply multiple filters.
+            SearchBy::Multiple(filters) => filters.iter().all(|filter| filter.matches(kara)),
+
+            // Handled after...
+            SearchBy::Playlist(_) => true,
+        }
+    }
 }
 
 impl Search {
@@ -73,19 +96,6 @@ impl Search {
 
     /// A match function.
     pub(crate) fn matches(&self, kara: &Kara) -> bool {
-        match &self.0 {
-            SearchBy::Query(regex) => regex.is_match(&kara.to_title_string()),
-            SearchBy::Id(id) => kara.id.local_id().eq(id),
-            SearchBy::SongType(ty) => kara.song_type.eq(ty),
-            SearchBy::SongOrigin(ori) => kara.song_origin.eq(ori),
-
-            SearchBy::Author(_) => todo!(),
-            SearchBy::Tag(_) => todo!(),
-
-            SearchBy::Multiple(_) => todo!(),
-
-            // Handled after...
-            SearchBy::Playlist(_) => true,
-        }
+        self.0.matches(kara)
     }
 }