我在一个销售让我们说的东西并提供"供应商搜索"的网站上工作.在此搜索中,您可以输入您的城市,邮政编码,地区和距离(以公里或英里为单位),然后该网站会为您提供供应商列表.
为此,我有一个供应商的数据库.在形式保存这些供应商,您可以输入他们的详细地址,当你点击保存按钮,谷歌地图的请求,以获得他们的经度和纬度而成.
当有人进行搜索时,我会查看一个表格,其中存储了所有搜索字词及其lat/lng.这张表看起来像
+--------+-------+------+
| term | lat | lng |
+--------+-------+------+
Run Code Online (Sandbox Code Playgroud)
所以第一个查询非常简单
select lat, lng from my_search_table where term = "the term"
Run Code Online (Sandbox Code Playgroud)
如果我找到了结果,那么我会为访问者想要的范围内的所有供应商搜索一个很好的方法,然后在地图上打印结果.
如果我没有找到结果,我会用levenshtein函数搜索,因为人们写bruxelle或bruxeles而不是bruxelles是非常常见的事情,我不想一直要求谷歌地图(我也有一个"多少次搜索"我的表中的列以获取一些统计信息"
所以我请求没有where子句的my_search_time并循环遍历所有结果以获得最小的levensthein距离.如果最小结果大于2,我从谷歌地图请求坐标.
这是我的问题.对于一些国家(我们在世界各地有几个网站),my_search_table有15-20k +条目...而且php(实际上)不喜欢循环这样的数据(我完全理解)并且我的请求属于php超时.我可以增加这个超时但问题将在几个月内相同.
所以我尝试了levensthein MySQL函数(在stackoverflow btw 上找到),但它也很慢.
所以我的问题是"有没有什么方法可以在非常大的数据集上快速进行搜索?"