I have a table which has a particular column of type JSON, where some user’s contact information are stored. I can alter the table and add new columns with cached values to increase search performance if needed (this is a new system, which is in the state of designing/at the beginning of implementation).
The top-level keys in the JSON are ‘name’ (both first and last name as one value), ‘address’ (a hash containing street, state, zip etc) and ‘other’ (tel, email, www etc). These are the three categories of information we are storing of customers.
One property of this JSON column is, that I really can’t tell what keys will be there (that’s why it is a JSON, so it remains flexible in this sense), but I need to search all the values.
My main problem is, that I’ve been told to implement a search functionality with one single input (like google), which would search in every value, even combined (so if u search ‘John Smith Slovakia’, it would find customers with the name John Smith who lives in Slovakia’).
Another required property is that it has to support partial searches, i.e. if you wan’t to find every customer with the last name Smith who live in street named ‘Somelongname’, then it would be enough to type in ‘smith somelong’ and it would still find them.
I’ve looked into full text search and it looked fine, except it did not really support partial searches.
Is there a better, more efficient solution, than searching every input word separately accross all the values using LIKE ‘%search_token%’ and then merging the results for every search token into the final result?
BTW I’m using PostgreSQL.