I thought I would just implement MySQL full text boolean search and be done with it.
Turns out there are some significant limitations which give odd or empty results. Mostly this is because of a minimum word length (4, by default, although I changed it to 3) and weird interactions with "quoted strings" and wildcards.
So I try to preprocess the search terms, but there will always be edge cases, which is frustrating for a perfectionist. Please let me know if you get wrong results, or none at all, for a particular search text.
Meanwhile if you know a bit about boolean full-text searches, you can bypass my preprocessing by surrounding search text in ["square brackets"].