Как создать функцию быстрого автозаполнения на сервере - PullRequest
0 голосов
/ 03 марта 2019

Я довольно плохо знаком со структурами данных, но я пытался реализовать эффективную функцию поиска города / автозаполнения города на серверной части моего приложения (экспресс-сервер nodeJS).

Первоначально я был толькозагрузка в память множества городов (которых было около 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?Есть ли способ эффективно настроить таблицу базы данных для быстрого поиска на основе суффиксов?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Исходя из моего опыта, 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

0 голосов
/ 03 марта 2019

Рассмотрите возможность использования автозаполнения (jquery UI) https://jqueryui.com/autocomplete/

...