Xapian is very good (very complete) if you have time for the initial setup.
It functions the way you expected the search engine to work, tell the indexer which bits of information will be indexed under which namespace / table / object (page, profile, products, etc.), then it will issue a request for your users to based on keywords, it also supports Google style tags, for example, “profile: Mark icecream” will look for my profile for the word icecream, I seem to remember it, supporting ranges too for data that you specify as numeric.
It can be used in local mode, which can offer spelling modifications (did you mean?) Or remote mode, which many sites can index and query.
What really saved me once was the ability to attach temporary insecure data to an indexed item, for example. attaching the database identifier to all the data indexed for this record is very good for moving on and getting the whole record from the database when your matches are returned from xapian.
source share