custom search filter with abstraction