自动填充功能和私密搜索"

时间:2014-08-20 21:19:31

标签: javascript search architecture autocomplete client-side

自动填充字段的性能不佳会降低其实用性。如果客户端实现必须调用执行大量数据库查找的端点,则响应时间很容易令人沮丧。

一种巧妙的方法来自AWS Case Study: IMDb。它曾经带有一个图表(不再可用),但简而言之,将为每个可以以有意义的方式解决的组合生成和存储预测树。例如。 sta的分辨率将包括将存储的Star Wars, Star Trek, Sylvester Stallone,但stb将无法解析为任何有意义且无法存储的内容。

  

为了获得尽可能低的延迟,所有可能的结果都是   用文件预先计算每个字母组合   搜索。每个文档都被推送到Amazon Simple Storage Service   (亚马逊S3)并由此向Amazon CloudFront投放文件   物理上靠近用户。理论上可能的数量   搜索计算是令人难以置信的 - 一个20个字符的搜索有23 x   1030种组合 - 但在实践中,使用IMDb对电影和电影的权威   名人数据可以将搜索空间减少到大约150,000个文档,   其中Amazon S3和Amazon CloudFront可以分发几个   小时。 IMDb使用每日更新以多种语言创建索引   对于超过100,000个电影和电视节目以及名人姓名的数据集。

如何通过私人数据实现同样高效的体验?例如。自动完成客户端名称,工作ID,发票号码......为不同的用户存储不同的文档/决策树听起来很昂贵,特别是如果某些数据(客户端名称?)可供多个用户使用。

2 个答案:

答案 0 :(得分:1)

你说这样的工作量需要一些特殊的优化。

您可以使用现成的搜索引擎,例如Apache luceneSolr(用于lucene的REST API包装器)

此引擎针对全文搜索进行了优化,可以使用私有数据。

工作步骤:

  1. 安装solr(或lucene)
  2. 用于存储信息的设计架构(您需要哪些字段和哪些类型的搜索)
  3. 将数据加载到其中(通过bach操作或基于更新)
  4. 根据solrs查询语言查询搜索(类似于Google搜索)。 在这个地方,除了原始用户查询之外,您还可以添加基于user_id或任何over参数的特殊限制。因此私人数据不会在用户之间混乱。

答案 1 :(得分:0)

我实际上同意CGI。最好的解决方案是第三方搜索引擎。其他任何东西都试图建立自己的搜索引擎。我真的不确定您的帖子所使用的硬件是什么,所以如果你得到LAMP托管,我会给你一个可能的低眉解决方案。

因此,在您的PHP代码中,您将创建一个查询字符串,如:

$qstr = "SELECT * FROM Clients WHERE `name` like '%".$search."%' ORDER BY popularity DESC LIMIT 0,100";

比增加通过“搜索引擎”找到的每条记录的流行度列。 在前端(让我们说你使用Dojo)你可以做类似的事情......

<script>
   require(["dojo/on", "dojo/dom", "dojo/request/xhr", "dojo/domReady!"], function (on, dom, xhr) {
       on(dom.byId('txtSearch'), "change", function(evt) {
           if (typeof searchCheck !== undefined) clearTimeout(searchCheck);
           searchCheck = setTimeout(function() { //keep from flooding XHR
               xhr("fetch-json-results.php", {
                  handleAs: "json"
               }).then(function(data){
                  //update txtSearch combo store
               });
           }, 500);
       });
   });
</script>
<input id="txtSearch" type="text" data-dojo-type="dijit/form/ComboBox" data-dojo-props="intermediateChanges:true">

这将是低技术低预算(LAMP)等效答案。