I've thought about the concept myself a lot over the years, and ended up deciding that if I was going to go that far, I might as well just use filter notation. So rather than do something special for tags:myTerm I'd just do [tag[myTerm]]. Now you can't do that in the normal, main search box, but I have a sidebar tab with kind of a persistent search area and I use prefix filtering to see what kind of results I want.
Just for reference since you asked for wikitext, I have a normal <$edit..> widget for the search box going to $:/temp/mysearch, and then down below is the parsing.
<$vars regfilter="^\[" regsystem="^\$" regshadow="^\!" mysearch={{$:/temp/mysearch}} mysearchelse={{{ [{$:/temp/mysearch}trim[$]trim[!]] }}}>
<!-- Filter type search -->
<$list filter="[<mysearch>regexp<regfilter>]">
<$list filter="[<mysearch>minlength[2]]" emptyMessage="">
//Filter results://<br>
<$list filter=<<mysearch>> emptyMessage="(no filter matches)">
<$link>{{!!title}}</$link><br>
</$list><hr>
</$list>
</$list>
<!-- System type search -->
<$list filter="[<mysearch>regexp<regsystem>]">
<$list filter="[<mysearchelse>minlength[2]]" emptyMessage="">
//Title contains://<br>
<$list filter="[is[system]search:title<mysearchelse>]" emptyMessage="(no title matches)">
<$link to={{!!title}}><$text text={{!!title}}/></$link><br>
</$list><hr>
//Text contains://<br>
<$list filter="[is[system]search:text<mysearchelse>]" emptyMessage="(no text matches)">
<$link to={{!!title}}><$text text={{!!title}}/></$link><br>
</$list><hr>
</$list>
</$list>
<!-- Shadow type search -->
<$list filter="[<mysearch>regexp<regshadow>]">
<$list filter="[<mysearchelse>minlength[2]]" emptyMessage="">
//Title contains://<br>
<$list filter="[all[shadows]search:title<mysearchelse>]" emptyMessage="(no title matches)">
<$link to={{!!title}}><$text text={{!!title}}/></$link><br>
</$list><hr>
//Text contains://<br>
<$list filter="[all[shadows]search:text<mysearchelse>]" emptyMessage="(no text matches)">
<$link to={{!!title}}><$text text={{!!title}}/></$link><br>
</$list><hr>
</$list>
</$list>
<!-- Standard type search -->
<$list filter="[{$:/temp/mysearch}!regexp<regfilter>!regexp<regsystem>!regexp<regshadow>!regexp[^\+]]">
<$list filter="[{$:/temp/mysearch}minlength[2]]" emptyMessage="">
//Title starts with://<br>
<$list filter=<<PrefixFilter>> emptyMessage="(no prefix matches)">
<$link>{{!!title}}</$link><br>
</$list><hr>
//Title contains://<br>
<$list filter=<<TitleFilter>> emptyMessage="(no title matches)">
<$link>{{!!title}}</$link><br>
</$list><hr>
//Text contains://<br>
<$list filter=<<TextFilter>> emptyMessage="(no text matches)">
<$link>{{!!title}}</$link><br>
</$list>
</$list>
</$list>