I doubt that there’s a standard way to do this. If you don’t need to handle too many different search scenarios, you could write separate search methods for each situation. That would mainly be useful if you were doing searches in different parts of an application.
For instance, you might have search methods called searchAdmin() and search() which are used in an admin grid view and the regular site search respectively. The second could be much more restrictive than the first, to prevent users from constructing searches that include fields that they shouldn’t control.
If you need it to be more flexible than this - which seems to be the case - then I don’t think there’s a recommended way to do it. Your approach of passing additional data into the search method seems as good as any.