我试图通过单词相似性搜索,或者即使有人写错字。
例如,如果有人使用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 |
+----+---------------------------+------------------------------------------------------+
答案 0 :(得分:2)
您应该通过查看Soundex算法启动。它为给定的字符串分配“声音”,可用于查找匹配的单词。
它特别适合英文文本,但是,只要你能接受它,它就不会太糟糕。
例如,Pax
和packs
生成P200
,heiress
和hares
都提供H620
,对于您的问题, Picadilly
和Piccadilly
提供P234
。
因此,如果您将Soundex代码与单词一起存储在数据库中,并在该代码上编制索引,则可以非常快速地获得一个紧密匹配列表。