您可能还需要考虑
Sphinx或
Lucene的全文,例如搜索mysql的全文.我没有亲自使用它们,但我听说两者都优于mysql内置的全文索引.
所有这些方法都需要注意的一点是,它们需要一个特殊的索引来保持更新,这会增加更多的维护和服务器开销.
对于适用于产品名称或数字的无维护解决方案,只需按空格分割用户的搜索条件,并为查询添加LIKE’%term%’.
此外,我创建了一个特殊的搜索字段,它是产品名称或数字,其标记按字母顺序排列,空格和符号被剥离.每次产品名称更改时,您都需要更新此字段.然后除了对原始字段的查询之外,我还搜索这个新的剥离字段.例如,如果您的产品名称为“cat 3306 longblock”,则创建product_name_search字段并放置“3306catlongblock”.当用户搜索3306长块时您通过剥离符号并在空格上拆分来处理搜索:
WHERE (other product name search clauses) OR
(product_name_search LIKE '%3306%' AND product_name_search LIKE '%longblock%')
这个过程不如freetext好,但它对产品名称和数字的合理性很好.