I'm building an e-commerce website and need to add a product-search feature. I don't want searches to match only the exact product name; I'd also like users to find relevant products by entering related words or phrases. For example, a search such as "fish cakes salmon" should be able to find products whose descriptions or associated keywords contain those terms. I'm still new to development, so I'm looking for a straightforward approach and guidance on what to learn first.
3 Answers
First decide which product information should be searchable. You might use manually assigned keywords, product categories, tags, or the description. Searching tags is usually more predictable, while searching descriptions is easier to set up but requires figuring out which words are actually important. Combining both can give users more useful results.
If you’re using PostgreSQL, an `ILIKE` condition with wildcards can provide a basic case-insensitive partial match, such as `name ILIKE '%shoe%'`, which can find “running shoes.” For better results, PostgreSQL full-text search with `tsvector` and `tsquery` can handle word variations and rank matches by relevance. Start with a basic SQL solution rather than adding a separate search service before you actually need one.
I appreciate the recommendation. I’ll start with a basic database search and look into full-text search afterward.
A simple starting point is to search a product description or keyword field in your SQL query. Split the user’s search text into separate words, then require each word to appear. For example, “fish cakes salmon” could become conditions like `Description LIKE '%fish%'`, `Description LIKE '%cakes%'`, and `Description LIKE '%salmon%'`. You could also store searchable keywords in a metadata field, such as JSON, if each product has flexible attributes. This approach is fine for learning and small datasets; worry about indexes and more advanced performance improvements later.
Thanks for the advice! That gives me a clear starting point.

That makes sense. I’ll think about which fields should count as searchable keywords.