End-users have serious trouble with complex boolean constructions. There have been a number of studies of this (AND is pretty easy for them to understand, but OR is hard). Provide your end-users with access to a general-purpose boolean expression generator and you're jumping down a rabbit hole with no end.
- JacobM's solution is a nice simplification.
- One system that I've used in the past is to have search refinement: only allow maybe one or two decisions for the first search, then allow end-users to whittle down the results with a series of single decisions ("just show contractors", "not retail", etc.) For this to work well you usually need an easy way for them to maintain recent searches, either through a tabbed window list or something else.
- Think carefully about your end-users. Do they really need a complete boolean search generator? What is the actual data that they want? Does accessing that data require searches no more complex than some arbitrary limit? If so, design your UI to support just up to that limit. JacobM's solution is an example of this to some degree.