Gate is like an "if-then-else"
construct in programming languages. It functions, however, on
the record level rather than on the expression level. If the
first term is present, return the second term, else return the
third term.
For each record, if there is a hit in the
first term, then any hits for that record in the second term
are returned (along with their respective weights). If there
is no hit for the first term in that record and a third term
was passed to the operator, then any hits that third term has
for that record are returned.