ECMS Site Search
From NewHaven Software Wiki
There are a few options in the admin as to how the search is performed. One of the settings is "Choose the type for the site search:", and the available options are "Return partial and whole word matches" and "Return only whole word matches". Whole word matches are exact matches. If a customer searches for rug then the search would only return items that have the term "rug". If you have it it set to return partial word matches then any item containing a word that has "rug" anywhere in it will be returned, like drug, drugs, rug, rugs, rugby, rugged, shrug, shrugs, shrugged, frugal, trug, etc. This can return a lot of results.
The other option that effects the amount of results returned is the "Choose fields to use with the site search" option. You are currently setup to "Use the fields defined in the search templates", which are: "keywords,prod_name,sku,desc_header,prod_description,cust_1,cust_2,cust_3,cust_4,cust_5,cust_6,attribute1,attribute2,attribute3,attribute4". This means that all of those fields are indexed and searched when a user enters a search term.
So for example, if you have 1,000 products indexed by 1,000 words per product then that is 1,000,000 words that need to be indexed. If you have 300 stores all with 1,000,000 indexed words then you can imagine the resources that would use. Google has a few millions servers (and a few billion dollars) they can throw at search so something like this is nothing to them, but sadly we cannot compete at that level.
I took a recent product export for your site and did a little benchmarking. I searched all the available fields for the term "rug" and returned 2,155 results. I did a whole word match only and came back with 1,905 matches. I then went into your admin and did a count on all of your product name that contain the term "rug" and found 590 results. When I did a whole word match it came back with 573. Now I didn't eliminate inactive items as I'm only using this for reference.
So what happens when a user searches for a term that returns too many results? Rather than slow the system down the search just returns the message "Your search returned too many results. Please refine your search and try again." But there are a few things you can do to minimize this.
- Check your Search Terms Report (Reporting >> Search Terms) and see what people are searching for. -- This is your best friend. Here you can see the popular searches on your site and test the results. You can also setup 'Search Redirects' (explained below) and View Search Results. If you click the 'View Search Results" link to see what items are returned. Take a look at 'rug' and you will see 313 results, including items like:
Crow's Cabin Sign 6715-S Faux Distressed Leather Cornice 9050-S Iron Wall Sconce 9263 Lariat Stool 9011-S Petroglyph Print Barstool 9014-S Pinecone Prairie Twin Tree Sconce 7669-S Rebel Biker Jacket 9137 Red River Valance 8007-S Sacred Crosses Belt 8885 Spirit of the West Stallion Sculpture 4748 Vintage Leather Belt 9030 Yakima Flat Screen TV Cabinet
Some of these items seemingly have nothing to do with 'rug', for example, the Yakima Flat Screen TV Cabinet has the term rug in the description: "Traditional southwestern rug pattern is hand-painted...." And the Sacred Crosses Belt matched the word 'rugged' in the description:"The swagger of rugged leather...."
You can eliminate a lot of these products by using "Whole Word Matches" and in the "View Search Results" by clicking on the "Exclude Product" checkbox.
- Setup 'Search Redirects'. -- Search Redirects are gold if you have categories that match a search term. For example, if you have a category with nothing but rugs you can setup a redirect to that category when customers search for the term 'rug'. If your rugs are scattered amongst multiple categories this is not really an option, but for some items it may be. You could also setup a hidden category with all of your rugs and redirect 'rug' and 'rugs' to that category.
- Limit the fields searched. -- Currently you are set to search "keywords,prod_name,sku,desc_header,prod_description,cust_1,cust_2,cust_3,cust_4,cust_5,cust_6,attribute1,attribute2,attribute3,attribute4". This may seem like a good idea because you are matching as many fields as possible, but it's not very targeted. You do not want to overwhelm a customer with too many results. Which fields are important to you? Think about your own searches on the web.
- Choose whole word matches. -- This has some benefits and drawbacks. If a user searches for 'rug' then only products that match on that term are returned, not rugs, drug, shrug, etc. That makes your searches results much more valid to the users search string but has the potential to overlook plurals.
- Use Category Filters. -- Category filters allow the user to narrow down a list of products by filters you set up. For example, you could have a filter named 'rugs' with a yes or no option. Then you could have a filter named 'runner' with a yes or no option, and another filter named 'shape' with oval, round, square, and rectangular as options, and another filter named 'fringes' with a yes or no option. This allows a user to select something like: all rugs that are not runners and are round w/o fringes, thereby returning a lot fewer and far more relevant results. Category filters would require a minor template upgrade and a lot of investment of time on your end though.
I went to Amazon and searched for 'rug' and received 563,090 results. Obviously I cannot look through that many items, I would need to narrow my search. But if I apply the filters: "8 x 10", with a floral pattern and made out of wool I only see 75 results. Those are the only 75 results I care about so I have closer to 100% relevancy on my search now, rather than .00013990188214665447% by just using the term 'rug'.