Как сделать поиск по бд городов?

338
26 мая 2017, 15:49

Есть БД всех городов мира, нужно сделать автоподсказку при вводе, проблема в том что в БД более миллиона записей и обычный LIKE заставляет бедную БД задуматься секунд на 10

Answer 1

Попробуй сделать что б начинало искать после введенных 3-ех первыйх букв, тогда и нагрузка будет меньше! Я использовал https://jqueryui.com/autocomplete/

Answer 2

Решал подобную задачу. Для начала структурируйте сами данные. Разбейте города по странам и присвойте каждому городу свой приоритет (например, столицы - 1, миллионники - 2, областные центры - 3 и т.д.). Далее запускается поиск по этому приоритету (и выводятся города только той страны, к которой они относятся). В начале подсказки выводятся наиболее значимые объекты (например, всего в подсказке выводится 5 городов). Далее, если не хватает данных для вывода по самому высокому приоритету, выводятся данные по более низкому и т.д. Из плюсов здесь также будет то, что наиболее вероятные города-подсказки (которые и нужны пользователю) будут в верхней части списка.

Что-то мне подсказывает, что у вас не проставлены/неверно проставлены индексы. Миллион городов это относительно небольшая таблица, LIKE должен выполняться за доли секунды.

По хорошему, здесь вообще нужна структурированная геобаза по типу VK (где города упорядочены по отдельным географическим районам), т.к. даже в рамках одного района встречаются населенные пункты с одинаковым названием. Чтобы их не путать нужна подсказка с указанием географического района, к которому относится населенный пункт.

READ ALSO
Нужно поменять цвет иконки

Нужно поменять цвет иконки

Как можно поменять цвет иконки средствами php?

228
Создать не стандартное меню для WordPress

Создать не стандартное меню для WordPress

Имеется такая структура меню:

319
jQuery serialize() проверка GET запроса

jQuery serialize() проверка GET запроса

Есть функция serialize() в jQuery, вопрос как провести проверку get запроса в php?

401
Сортировка в php

Сортировка в php

Всем привет, проблема такая, надо сделать сортировку по принципу ссылки на функцию сортировки или как я сделал:

270