【问题标题】:How to create a fast autocomplete feature on the back-end如何在后端创建快速的自动完成功能
【发布时间】:2019-03-03 10:55:25
【问题描述】:

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

最初我只是在内存中加载一组城市(大约 20.000 个城市);我会让我的客户端应用程序通过端点 /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);
});

虽然因为我只有 20,000 个城市,所以这种方法运行得很快,但我认为它在时间复杂度方面相当糟糕,因为最坏的情况复杂度是 O(n)

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

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

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

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

提前致谢!

【问题讨论】:

    标签: javascript node.js database express data-structures


    【解决方案1】:

    根据我的经验,ElasticSearch 可以成为自动完成的解决方案。它可扩展且功能强大。一些推荐阅读的教程:

    您还可以在他们的官方文档中找到一些自动完成文档:

    https://www.elastic.co/guide/en/elasticsearch/guide/master/_index_time_search_as_you_type.html - https://www.elastic.co/guide/en/elasticsearch/reference/6.6/search-suggesters-completion.html

    【讨论】:

    • 非常感谢您的链接!
    【解决方案2】:

    考虑使用自动完成(jquery UI) https://jqueryui.com/autocomplete/

    【讨论】:

      猜你喜欢
      • 2015-01-09
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-29
      • 2023-04-01
      • 2018-01-25
      相关资源
      最近更新 更多