如何在MySQL中获得类似的搜索结果?

时间:2014-09-11 05:33:37

标签: mysql

我试图通过单词相似性搜索,或者即使有人写错字。

例如,如果有人使用picadilly正确搜索piccadilly,则应该得到结果。

我曾尝试过使用PHP删除最后一个字符,直到使用PHP留下3个字符,例如picadilly picadill picadil picadi picad {{ 1}} pica

它正在工作,但我也得到了不必要的结果(因为关键字缩短为3个字符)并不相似,也不认为这是一个好方法,有没有更好的方法?

表结构&数据:

pic

查询:

+----+---------------------------+------------------------------------------------------+
| id | name                      | address                                              |
+----+---------------------------+------------------------------------------------------+
|  1 | Bethnal Green Station     | Bethnal Green Tube Station, London, E2 0ET           |
|  2 | Westminster Station       | Westminster Tube Station, London, SW1A 2JR           |
|  3 | Goldhawk Road Station     | Goldhawk Road Tube Station, London, W12 8EG          |
|  4 | Piccadilly Circus Station | Piccadilly Circus Tube Station, London, W1J 9HP      |
|  5 | Ravenscourt Park Station  | Ravenscourt Park Tube Station, London, W6 0JJ        |
|  6 | Barons Court Station      | Barons Court Tube Station, London, W14 9EA           |
|  7 | Charing Cross Station     | Charing Cross Tube & Train Station, London, WC2N 6RQ |
|  8 | Hammersmith Station       | Hammersmith Tube Station, London, W6 8AB             |
|  9 | Embankment Station        | Embankment Tube Station, London, WC2N 6NS            |
| 10 | Leicester Square Station  | Leicester Square Tube Station, London, WC2H 0AP      |
+----+---------------------------+------------------------------------------------------+

1 个答案:

答案 0 :(得分:2)

您应该通过查看Soundex算法启动。它为给定的字符串分配“声音”,可用于查找匹配的单词。

它特别适合英文文本,但是,只要你能接受它,它就不会太糟糕。

例如,Paxpacks生成P200heiresshares都提供H620,对于您的问题, PicadillyPiccadilly提供P234

因此,如果您将Soundex代码与单词一起存储在数据库中,并在该代码上编制索引,则可以非常快速地获得一个紧密匹配列表。