Javascript 如何在后端创建快速自动完成功能

Javascript 如何在后端创建快速自动完成功能,javascript,node.js,database,express,data-structures,Javascript,Node.js,Database,Express,Data Structures,我对数据结构非常陌生,但我试图在我的应用程序(nodeJS express服务器)的后端实现一个高效的城市查找/城市自动完成功能 最初,我只在内存中加载了一组城市(大约有20000个城市);我让我的客户端应用程序通过端点/search搜索一个城市,并返回一个与用户搜索内容匹配的城市列表: import cities from './cities.json'; // Search endpoint app.get('/search', (req, res) => { const res

我对数据结构非常陌生,但我试图在我的应用程序(nodeJS express服务器)的后端实现一个高效的城市查找/城市自动完成功能

最初,我只在内存中加载了一组城市(大约有20000个城市);我让我的客户端应用程序通过端点
/search
搜索一个城市,并返回一个与用户搜索内容匹配的城市列表:

import cities from './cities.json';

// Search endpoint
app.get('/search', (req, res) => {
  const results = [];
  const searchKey = req.body.key.toLowerCase();

  for (let city of cities) {
    if (city.toLowerCase().contains(searchKey)) {
      results.push(city);

      // Max 10 cities
      if (results.length > 10) {
        break;
      }
    }
  }

  res.json(cities);
});
虽然这工作很快,因为我只有20000个城市,但我认为这在时间复杂性方面相当糟糕,因为最糟糕的情况复杂性是
O(n)

因此,我考虑实现一个基于后缀树的字典,以便查找键的复杂性为
O(m)
m
是键的长度(如果我错了,请纠正我),但代价是空间复杂性更高

但正如我所说,我对所有这些都有点陌生,所以我的问题是:

1)通常如何实现快速自动完成功能

2)如果我将城市存储在SQL数据库中会更好吗?有没有一种方法可以有效地配置数据库表以允许快速的基于后缀的查找

提前谢谢

考虑使用自动完成(jqueryui)

根据我的经验,ElasticSearch可以作为自动完成的解决方案。它具有可扩展性和强大的功能。以下是一些推荐的教程:

  • =>这个以城市数据为例的例子可能适合您的情况
您还可以在他们的官方文档中找到一些自动完成文档:


-

非常感谢您提供的链接!