您可能还想考虑使用Sphinx或Lucene进行全文搜索,例如搜索 mysql 的全文。我没有亲自使用过它们,但我听说两者都优于 mysql 内置的全文索引。
所有这些方法需要注意的一点是,它们需要一个特殊的索引来保持更新,这会增加更多的维护和服务器开销。
关于狮身人面像的好文章:http: //astellar.com/2011/12/replacing-mysql-full-text-search-with-sphinx/
对于适用于产品名称或编号的免维护解决方案,只需将用户的搜索词按空格分开,并为每个查询添加 LIKE '%term%'。
此外,我创建了一个特殊的搜索字段,它是产品名称或编号,其标记按字母顺序排列,空格和符号被去除。每次产品名称更改时,您都需要更新此字段。然后,除了对原始字段的查询之外,我还OR
搜索了这个新的剥离字段。例如,如果您有一个像“cat 3306 longblock”这样的产品名称,则创建一个 product_name_search 字段并放置“3306catlongblock”。当用户搜索时,3306 long-block
您通过剥离符号和分割空格来处理搜索:
WHERE (other product name search clauses) OR
(product_name_search LIKE '%3306%' AND product_name_search LIKE '%longblock%')
这个过程不如自由文本好,但它对产品名称和编号的效果相当好。