I realised pretty quickly that a straight LIKE query wasn't going to work for search as it caught things like parts of URLs where the search term wasn't in the actual text.
Switching to a REGEXP query has resolved this although it took me some time last night to work out the correct regex pattern to exclude what I need. Looking at this introduced me to regex character classes like [:punct:] which came in handy.
This morning I have added highlighting of the search term within results using a preg_replace to only include the correct parts (i.e. not breaking any HTML) in styled <span> tags. If no results are found there is a link to search the archive AKA the WordPress posts.
After adding a number of pages (grandchildren) to the Garden recently performance has absolutely tanked. The nested queries are obviously struggling.
I'm looking at replacing the queries with wp_list_pages() but need to sort out a custom walker for changing the output to include the additional functionality I had built.
It feels a bit weird working on WordPress stuff again.