2015-07-20 38 views
1

我有一个包含20,000条记录的数据库。每个记录都有一个名字。当用户想要查看记录时,他可以访问Web应用程序并在输入字段中输入记录的名称。在输入时,数据库中的结果将显示/过滤匹配用户输入的内容。我想知道如何我使用下列语言堆栈这个改善“搜索”输入字段的结果?

编程的基本架构/概念: 前端:HTML5/JavaScript的(+ AJAX而用户输入进行即时通话) 后端:JAVA + JDBC连接到简单的SQL数据库

我的初步设想是:

  1. 用户类型的文本
  2. 每当进入或inputfield删除一个角色,让一个Ajax请求到后端
  3. 后端确实在名称字段LIKE%输入%的查询数据库中的
  4. 通过查询发现,所有的数据都发送一个JSON字符串到前端
  5. 的前端处理JSON字符串,并显示任何结果时,发现

我的两个问题是:处理的ajax请求数量很高,可能会造成很大的LIKE查询。有什么方法可以优化这个?只搜索他们输入/删除的每两个字符?只查询前十个结果?

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

注意:假设记录是个人和名称就像真实的人名,所以有些名称比其他人更常见。

回答

1

这里有可能的解决方案:

  • 使用BTREE类型的索引可以有效地执行搜索前缀搜索 - LIKE'前缀%'。
  • 衡量天真LIKE'%str%'解决方案的性能 - 您正在开发B2B应用程序,数据库可能会将该表加载到内存中,并且查询速度足够快。
  • 看看在你的数据库文件 - 可能有特殊功能,像倒排索引
  • 作为@Stepan诺维科夫建议,加载内存数据和搜索手动
  • 使用专门的搜索索引像SOLR或ElasticSearch(可能矫正只有20k记录)
  • 如果你感觉忍者,实施你自己的N-gram指数。
2

您可以选择SPA方法 - 加载所有20 000名/ ID,以客户端,然后在内存中过滤它 - 它应该是具有最小负载的数据库的最快方式和后端