我有一个数据库,其中包含公司及其各自的地址(采用sql结构):
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| company_id | int(11) | NO | MUL | NULL | |
| city | varchar(255) | NO | | NULL | |
| street | varchar(255) | NO | | NULL | |
| house | varchar(5) | NO | | NULL | |
| corp | varchar(2) | YES | | NULL | |
| litera | varchar(4) | YES | | NULL | |
| office | int(25) | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
我有一个搜索字段,人们很可能在其中用城市或街道或两者同时查询数据库。问题出在这里:
我不知道他们的输入会是什么样。我的意思是说,他们几乎不可能在没有至少指定街道的情况下搜索“ 44”之类的东西,但是他们仍然有很多选择。我将给出几个搜索词:
"Moscow" [just the city]
"Moscow, Leningradsky" [city AND street not including the type of the
street - which is "prospekt" ~ "avenue" in english]
"Moscow, Leningradsky pr[ospekt] [city AND street including the type of the
street, which may be shortened]
"Moscow, [ulitsa] Uralskaya [ulitsa] [city AND street where type can
preceed or succeed the street name itself (ulitsa meaning "street")]
和其他一些选项。我的第一个想法是像在城市和街道栏目中按词条搜索和LIKE搜索一样,但是如果他们输入两个单词怎么办?我什至不能确定第一个单词是城市(因为 他们可能只是以门牌号为第二个字的街道开头。
因此,我有点寻找部分匹配和模糊搜索,但无法真正弄清楚如何将其组合在一起工作。
人们对此有最佳的评价吗?