我找到了搜索解决方案。产品名称很少:
我使用 mysql 数据库,我尝试过 FullText搜索。
SELECT * FROM PRODUCTS WHERE MATCH('productName') AGAINST ('usb 8g')
。
以及 sphinx 但是在键入" usb 8g "时我没有得到任何结果。但是" usb 8gb"它已经奏效了。
我还需要在用户输入' ubs 8gb'时,它也会返回正确的结果。
任何像Google一样自动识别的解决方案?
答案 0 :(得分:0)
您必须使用通配符%
来匹配数据字符串的一部分。
尚未测试,但应该像:
SELECT * FROM PRODUCTS WHERE MATCH('productName') AGAINST ('usb 8g%')
P.S。请在发送到SQL语句之前清理用户输入。
答案 1 :(得分:0)
对于这种特定情况的Sphinx,使用说min_prefix_len=2
和expand_keywords=1
会起作用。这使得部分单词匹配成为可能。也就是说,' 8g'将匹配' 8gb',实际上查询变为' 8g *'。 “usb'”结尾处还有一个通配符。因为它也匹配' usb *' - 这不应该真正影响任何事情,因为不太可能有许多其他词开头的那些字符。
最终是一个权衡,如何'模糊'进行搜索,因为这可能会引入各种副作用。很难想出一个很好的例子,但有点像搜索案例'然后会匹配案例集'。但案例和案例集在强制不同的事情上。