错过一个角色时如何进行PHP搜索?

时间:2017-02-26 10:12:30

标签: php mysql search full-text-search sphinx

我找到了搜索解决方案。产品名称很少:

  1. USB金士顿8GB
  2. USB Kingmax 8GB
  3. USB Transcend 8GB
  4. USB Sandisk 4GB
  5. 我使用 mysql 数据库,我尝试过 FullText搜索

    SELECT * FROM PRODUCTS WHERE MATCH('productName') AGAINST ('usb 8g')

    以及 sphinx 但是在键入" usb 8g "时我没有得到任何结果。但是" usb 8gb"它已经奏效了。

    我还需要在用户输入' ubs 8gb'时,它也会返回正确的结果。

    任何像Google一样自动识别的解决方案?

2 个答案:

答案 0 :(得分:0)

您必须使用通配符%来匹配数据字符串的一部分。

尚未测试,但应该像:

SELECT * FROM PRODUCTS WHERE MATCH('productName') AGAINST ('usb 8g%')

P.S。请在发送到SQL语句之前清理用户输入。

答案 1 :(得分:0)

对于这种特定情况的Sphinx,使用说min_prefix_len=2expand_keywords=1会起作用。这使得部分单词匹配成为可能。也就是说,' 8g'将匹配' 8gb',实际上查询变为' 8g *'。 “usb'”结尾处还有一个通配符。因为它也匹配' usb *' - 这不应该真正影响任何事情,因为不太可能有许多其他词开头的那些字符。

最终是一个权衡,如何'模糊'进行搜索,因为这可能会引入各种副作用。很难想出一个很好的例子,但有点像搜索案例'然后会匹配案例集'。但案例和案例集在强制不同的事情上。