改善“搜索”输入字段的结果?

时间:2015-07-20 08:39:53

标签: java sql search architecture

我有一个包含20,000条记录的数据库。每条记录都有一个名字。当用户想要查看记录时,他可以访问webapp并在输入字段中键入记录的名称。在键入时,数据库的结果将显示/过滤用户键入的内容。我想知道如何编程的基本架构/概念

我正在使用以下语言堆栈: 前端:html5 / javascript(+ ajax在用户输入时进行即时通话) 后端:java + jdbc连接到简单的sql数据库

我最初的想法是:

  1. 用户键入文字
  2. 每当在输入字段中输入或删除字符时,向后端发出ajax请求
  3. 后端对数据库中的名称字段执行LIKE%input%查询
  4. 查询找到的所有数据都作为json字符串发送到前端
  5. 前端处理json字符串并显示它找到的任何结果
  6. 我的两个问题是:需要处理大量的ajax请求,以及可能非常繁重的LIKE查询。有什么方法可以优化这个?只搜索他们输入/删除的每两个字符?只查询前十个结果?

    您知道利用这些优化的网站吗?

    注意:假设记录是人,姓名就像真人姓名,所以有些名字比其他人更常见。

2 个答案:

答案 0 :(得分:2)

您可以选择SPA方法 - 将所有20 000个名称/ ID加载到客户端,然后在内存中过滤 - 它应该是最快的方式,对数据库的负载最小,并且返回端

答案 1 :(得分:1)

以下是可能的解决方案:

  • Restirct搜索前缀搜索 - LIKE'前缀%'可以使用BTREE类型索引有效执行。
  • 测量幼稚LIKE'%str%'解决方案 - 您正在研究B2B应用程序,数据库可能会在内存中加载该表并快速执行查询。
  • 查看数据库的文档 - 可能有像倒置索引一样的特殊功能
  • 正如@Stepan Novikov建议的那样,将数据加载到内存中并手动搜索
  • 使用专门的搜索索引器,如SOLR或ElasticSearch(可能只有20k记录就有过分杀伤力)
  • 如果您感觉忍者,请实施您自己的N-gram索引。