Java 提高a";搜索“;输入字段?

Java 提高a";搜索“;输入字段?,java,sql,search,architecture,Java,Sql,Search,Architecture,我有一个有20000条记录的数据库。每个记录都有一个名称。当用户想要查看记录时,他可以访问webapp并在inputfield中键入记录的名称。键入时,数据库中的结果将以用户键入的内容显示/过滤。我想知道如何编程的基本架构/概念 我正在使用以下语言堆栈: 前端:html5/javascript(+在用户键入时使用ajax进行即时调用) 后端:连接到简单sql数据库的java+jdbc 我最初的想法是: 用户输入文本 无论何时在inputfield中输入或删除字符,都要向后端发出ajax请求 后端

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

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

我最初的想法是:

  • 用户输入文本
  • 无论何时在inputfield中输入或删除字符,都要向后端发出ajax请求
  • 后端对数据库中的名称字段执行类似%input%的查询
  • 查询找到的所有数据都作为json字符串发送到前端
  • 前端处理json字符串并显示它找到的任何结果
  • 我关心的两个问题是:要处理的ajax请求数量太多,并且可能会有非常繁重的类查询。有什么方法可以优化这一点?是否只搜索他们键入/删除的每两个字符?只查询前十个结果

    你知道有哪些网站利用了这些优化


    注意:假设记录是人,姓名与真人姓名相似,因此某些姓名比其他姓名更常见。

    您可以选择方法-将所有20000个姓名/ID加载到客户端,然后在内存中进行过滤-这应该是最快的方法,对数据库和后端的负载最小。

    以下是可能的解决方案:

    • Restirct搜索到前缀搜索-类似于“prefix%”可以使用BTREE类型索引高效地执行
    • 度量像“%str%”这样的朴素解决方案的性能—若您正在处理B2B应用程序,数据库可能会将该表加载到内存中,并以足够快的速度执行查询
    • 查看数据库的文档-可能有一些特殊功能,比如倒排索引
    • 正如@Stepan Novikov所建议的,将数据加载到内存中并手动搜索
    • 使用专门的搜索索引器,如SOLR或ElasticSearch(可能只对20k记录进行了过度使用)
    • 如果你觉得忍者,实现你自己的索引