gpt4 book ai didi

php - 编辑搜索

转载 作者:可可西里 更新时间:2023-11-01 06:37:34 25 4
gpt4 key购买 nike

我在一个销售东西 并提供“供应商搜索”的网站上工作。在此搜索中,您输入您的城市、邮政编码或地区和距离(以公里或英里为单位),然后网站会为您提供供应商列表。

为此,我有一个供应商数据库。在保存这些供应商的表单中,您输入他们的完整地址,当您点击保存按钮时,系统会向谷歌地图发出请求以获取他们的经纬度。

当有人进行搜索时,我会查看存储所有搜索词及其纬度/经度的表格。这张 table 看起来像

+--------+-------+------+
| term | lat | lng |
+--------+-------+------+

所以第一个查询非常简单

select lat, lng from my_search_table where term = "the term"

如果找到结果,我会使用一种很好的方法搜索访问者想要的范围内的所有供应商,并将结果打印在 map 上。

如果我找不到结果,我会使用 levenshtein 函数进行搜索,因为人们用 bruxelle 或 bruxeles 而不是 bruxelles 是很常见的,我不想一直请求谷歌地图(我也在我的表格中有一个“搜索了多少次”列来获取一些统计信息)

所以我请求不带 where 子句的 my_search_time 并遍历所有结果以获得最小的 levensthein 距离。如果最小的结果大于 2,我会从谷歌地图请求坐标。

这是我的问题。对于某些国家(我们在世界各地有多个站点),my_search_table 有 15-20k+ 个条目......而 php 不(真的)喜欢循环此类数据(我完全理解)并且我的请求属于 php 超时.我可以增加此超时,但问题将在几个月后出现。

所以我尝试了一个 levensthein MySQL 函数(在 stackoverflow 顺便说一句)但是它也很慢。

所以我的问题是“即使在非常大的数据集上,是否有任何方法可以加快搜索速度?”

最佳答案

我的建议基于三件事:

  • 首先,您的数据集很大。这意味着 - 它:足够大拒绝“全选”+“在 PHP 应用程序中运行 levenshtein()”的想法
  • 其次,您可以控制您的数据库。所以你可以调整一些架构相关的东西
  • 最后,SELECT 查询的性能是最重要的,而添加新数据的性能无关紧要

问题是您不能执行快速 levenshtein 搜索,因为levenshtein 本身 非常慢。我的意思是,计算编辑距离是一件很慢的事情。因此,您将无法仅通过“智能搜索”来解决问题。您必须准备一些数据。

可能的解决方案是:创建一些组索引并在添加/更新 数据期间分配它。这意味着 - 你将存储额外的列来存储一些散列(例如数字)。添加新数据时,您将:

  • 使用 levenshtein 距离执行搜索(因为您可以使用您的应用程序或您已经(已经提到过)针对插入的数据对表中的所有记录使用的功能
  • 将新行的组索引设置为在上一步中找到的行具有的索引值。
  • 如果没有找到,设置一些新的组索引值(它是第一行并且还没有类似的行)——这将不同于表中已经存在的任何组索引值

要搜索所需的行,您只需选择具有相同组索引值的行。这意味着:您的选择 查询将非常快。但是 - 是的,这会在添加/更改数据时造成巨大的开销。因此,它不适用于更新/插入性能很重要的情况。

关于php - 编辑搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15172716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com