使用JQuery和JSON格式的平面文件快速动态的autosuggest

使用JQuery和JSON格式的平面文件快速动态的autosuggest,jquery,json,imdb,Jquery,Json,Imdb,我在这件事上绞尽脑汁,所以我最后决定把它放在Stackoverflow上,希望有人能帮我解决这个问题 让我来概括一下问题: autosuggest功能最基本的用法是在每次击键时查询数据库 这种方法的优点是你总是能得到最新的结果 缺点是它可能很慢,而且在每次击键时对数据库进行寻址基本上是过度的。假设您想自动建议一个国家表,搜索类似“america”的内容将在数据库上生成7个SELECT查询! 因此,这种方法不是一种选择 第二个选项(我目前正在使用的)是收集所有可能的结果,并将其以JSON格式

我在这件事上绞尽脑汁,所以我最后决定把它放在Stackoverflow上,希望有人能帮我解决这个问题

让我来概括一下问题:

  • autosuggest功能最基本的用法是在每次击键时查询数据库
这种方法的优点是你总是能得到最新的结果

缺点是它可能很慢,而且在每次击键时对数据库进行寻址基本上是过度的。假设您想自动建议一个国家表,搜索类似“america”的内容将在数据库上生成7个SELECT查询! 因此,这种方法不是一种选择

  • 第二个选项(我目前正在使用的)是收集所有可能的结果,并将其以JSON格式保存到平面文件中。 因此,基本上您将拥有一个单独的文件,例如countries.json,其中包含所有国家。我没有查询数据库,而是指向countries json文件,每次击键都会在加载的json文件中搜索
此方法速度快,并利用了数据库。在国家/地区的示例中,这将是一个很好的解决方案,因为内容不是很动态,并且它不包含那么多数据,因此json平面文件将非常小,因此可以快速下载

但是,当json文件包含动态数据且数据集很大时,就会出现问题。 如果您想构建一个包含所有电影和演员的自动建议搜索,该怎么办? 将所有结果放在一个json文件中是荒谬的,因为该文件可能太大而无法下载。 让我们以IMDB(www.IMDB.com)为例。他们的网站上有自动建议功能。搜索电影片名或演员的速度极快,它可以搜索数十万条记录。深入研究他们的方法,我注意到以下几点:

如果使用Google Chrome调试窗口(或Filezilla Firefox Firebug): 查看“网络”选项卡中的脚本。例如,当您键入“星球大战”时,您会注意到,通过键入每个字母,将加载一个单独的json文件。 首先是s.json,然后是st.jsonsta.json,等等。。。 它停在star\u w.json 显然,它总是在第六个字母处停止

它加载的每个json文件包含8个与字母匹配的结果。似乎有36个文件夹匹配字母表中的每个字母,包括数字。 例如,star_w.json的链接是

我的问题是,你将如何构建一个类似的智能系统?他们是否将6个字母的所有可能组合作为json文件?您将如何生成这些文件? 还要注意的是,它不仅仅是看标题的开头来匹配。 因此,如果你想搜索“战争”,你也会在搜索结果中找到“星球大战”

如果您能帮助我们建立一个类似的系统,我们将不胜感激。 我认为这个系统非常简洁、快速,可以用于多种用途

编辑

好的,解决了。 我的解决方案是查询数据库和将结果缓存在平面json文件中的组合。 基本上,当用户键入例如“星球大战”时,每次击键我都会首先检查searchstring是否有json文件。如果它存在,我将只显示json文件的内容。如果该文件不存在,或者该文件早于您设置的某个时间限制(例如早于12小时),则可以查询数据库并以json格式回显输出。 同时将输出写入json文件。下次进行搜索时,它将只从平面文件中获取内容,而不是从数据库中获取内容(当然,在到达TTL之前)。 我已将字母长度限制为6个字母,因此如果搜索字符串大于6个字母,则不会发生任何情况,您只需继续查找上次找到的结果的搜索结果,例如《星球大战》,即star\w

使用此方法,缓存的json结果集合将根据用户输入自动填充。 您还可以编写一个脚本来循环表并生成json文件


我知道这不是一个完美的解决方案,但通过这种方式,至少可以通过将结果缓存在平面文件中来承担一些数据库负载。

我会使用一些搜索引擎软件来创建索引,比RDMS能够提供的更适合这些场景

看看Softbool的Boolware:(点击英文)链接


糟糕的网页,很棒的产品。

我会使用一些搜索引擎软件来创建索引,比RDMS能够提供的更适合这些场景

看看Softbool的Boolware:(点击英文)链接


糟糕的网页,很棒的产品。

你可以构建一个自动完成,每三分之一秒或半秒只发送一个新的请求-当人们键入时,他们通常每秒键入几个字符,因此这将减少数据库需要执行的查询数。但不理解FileZilla参考-FTP客户端?也许你指的是Firefox的FireBug?:)@哈尔弗:是的,我的意思是firebug:)是的,我想到了在击键和查询数据库时增加延迟的选项,但缺点仍然是你仍然查询数据库,并且当你键入时,你得不到那么快的结果。我不认为延迟在实践中是一个缺点-我相当肯定我已经看到一些这样的工作。如果用户希望检查自动完成结果,那么他们将减慢键入速度,否则他们将在不等待的情况下键入整个内容。这种方法也可能使它更具响应性。您可以构建一个自动完成,每三分之一秒或半秒只发送一个新请求—当人们键入时,他们通常每秒键入几个字符,因此这将减少数据库所需的查询数