add_rewrite_rule to pass entire path as a single parameter

A quick tweak to your regular expression. You are currently capturing only letters before the first /

add_rewrite_rule('^csearch/(.*)$', 'index.php?page_id=23&filter=$matches[1]', 'top');

Note when parsing this that you may or may not have a trailing slash at the end of your value of filter.