Как мне получить этот молниеносный поиск? - PullRequest
1 голос
/ 23 мая 2011

Я только что зашел на этот сайт: http://www.hittaplagget.se. Если вы введете следующее поисковое слово moo, автозаполнение появится сразу.

Но если вы перейдете на мой сайт, http://storelocator.no, и используйте одну и ту же поисковую фразу (в поле «Поиск бренда»), автозаполнению потребуется гораздо больше времени, чтобы предложить что-либо.

Я знаю, что мы можем только догадываться, какие технологии они используютиспользуя, но, надеюсь, кто-то здесь может сделать образовательное предположение лучше, чем я.

В моем решении я только делаю SELECT moo% FROM table и возвращаю результаты.Я еще не проиндексировал свою таблицу, так как в ней всего 7000 строк.Но я думаю об индексации своих таблиц с помощью Lucene.

Кто-нибудь может подсказать, что мне нужно сделать, чтобы получить одинаково быстрый автозаполнение?

Ответы [ 3 ]

4 голосов
/ 23 мая 2011

Вы должны добавить индекс в столбец, содержащий ваши условия поиска, даже на 7000 - в противном случае база данных будет искать по всему списку каждый раз.Смотри http://dev.mysql.com/doc/refman/5.0/en/create-index.html.

1 голос
/ 23 мая 2011

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

  • Не помещайте в таблицу ненужные вам строки - например, «неактивные» записи - храните их в другой таблице
  • Не помещайте в таблицу столбцы, которые вам не нужны
  • Этого можно добиться, имея специальную «таблицу поиска», которая просто содержит интересующие вас строки / столбцы, и обновляя ее из «мастер-таблицы».

Сканирование таблицы для таблицы с 7000 строк должно быть чрезвычайно эффективным, если строки маленькие; Из вашей проблемной области я понимаю, что это будет так.

Но, как отмечали другие, - не отправляйте 7000 строк на клиентскую сторону, когда это не нужно.

Обычный индекс может оптимизировать LIKE someprefix% для сканирования диапазона, поэтому, вероятно, полезно иметь его. Если вы хотите найти строку в любой части записи, это будет сканирование таблицы (которое не должно быть медленным на такой крошечной таблице!)

1 голос
/ 23 мая 2011

Lucene - это индекс полнотекстового поиска, который может быть, а может и не быть тем, что вы ищете. Lucene обнаружит любое вхождение «moo» во всем проиндексированном столбце (например, Mootastic и Fantasticmoo) и не обязательно ускорит ваш поиск, хотя это быстрее, чем поиск типа «% moo%», где x как.

Как уже отмечали другие, регулярный индекс (возможно, даже уникальный?) - это то, что вам нужно, если вы выполняете поиск типа «начинается с».

...