Надо хотя бы ссылку на какую-нибудь страницу. Возможно это на php написано.
Собственно вся задача состоит из двух частей:
1) К текстбоксу привязять Javascript + AJAX запрос на сервер
2) Серверный метод, который делает сам поиск и возвращает ссылки
Если сайт писался руками, то в принципе понятно как прикручивать, а если каким-то движком генерился, то тут надо искать специалиста по движку.
можно тупо через SELECT ... WHERE ... LIKE запрос сделать по полям, либо если хочется полнотекстовый поиск, то MATCH ... AGAINST
для ограничения совпадений рекомендую либо искать когда набрано не менее 3-х букв, либо использовать LIMIT в запросе
на клиенте jQuery, к полю привязаться не проблема (на onchange смотреть, что что-то набрано и делать запрос).
движок какой - пофиг, т.к. можно "сбоку" отдельный скрипт написать просто.
Дальше всё зависит от того, как и на чём построена БД.
Сильно нагруженный (подвисающий) autocomplete будет не помогать, а раздражать пользователя.
Нужен кэш. Строить грамотно кэш - задача не простая. Можно легко лешиться части позиций в списке.
Не знаю, как с mysql, но на других базах делал словарь, связанный с изначальным списком, и индексацию на префиксный like. Работало неплохо.
На postgres есть вообще FTS как раз для полнотекстового поиска (правда, мне не совсем подошло).
Проблема обычно в том, что надо искать по всем словам в строке.
Первый же пример из первого же попавшегося магазина:
"17.3" Ноутбук DEXP Ares E101 серый"
Просто like ноутбук% или Ares% (наиболее очевидные варианты) тут уже не проходит.
Для моих целей было достаточно искать по началу слова, или по префиксу всей строки, но, как правило, может быть сложнее
"ноутбук Ares" - вполне разумный запрос. А тут уже надо, как минимум, разбиение поисковой строки на токены, разбиение наименований на токены с индексацией и прочая хрень по сведению.
В общем, колхоз сделать не так просто, как кажется. Так что для "общих целей" лучше посмотреть в сторону баз, который поддерживают индексацию для текстового поиска и задрачиваться с ними.
UPD: Ну, или формализировать критерии поиска для конкретной предметной области, и наколхозить именно для нее. Так даже может получиться лучше, но такую формализацию сделать - не в лужу пукнуть.
В общем работа с данными, БД и её сервером должна решаться до autocomplete :)
Вроде, я его видел, когда колхозил (дело было месяцев 8 назад, а прототип надо было делать буквально за недели), но что-то не подошло. Так же как и с FTS в Postgresql.
Если интересно - большинство проблем, которые возникали с полнотекстовыми решениями:
- нужно было выдавать хоть какие-то результаты по первым буквам (кто-то, вроде, мог это делать, но большинство дает тупо по словарям)
- проблемы с разными языками/стоп-словами и прочее. Это зашибись для поиска в документах, где это реально важно, чтобы по букве 'a' не выдавалось все, ибо артикль везде, но надо было искать по "номенклатуре", где это не применимо.
- результаты должны были ранжироваться не только по релевантности "текстовой", но и по дополнительному "приоритету" со стороны (ну, типа популярности запроса).
Но вот если хомячков мало, и каждый ищет свое - процент непопадания в кеш будет полной жопой. Вот как ее решить - в этом весь вопрос.
З.Ы. Гуглу вообще хорошо - у них уже и словарные базы есть, и синонимы и прочее... Но заказчик, я полагаю, совсем не Гугл :-)
сейчас в БД более 86 тыс. profsector.com/katalog. Планируется более 600 тыс. вероятно нужна какая то подготовка индексов БД.
alxumuk2 писал(а)Это на калькуляторе что ли? :о)
Но я на 300к записей делал - там поиск будет минутами исчисляться
Вот есть под рукой MS SQL Server 2008 на серваке средней руки. Есть таблица на 400К записей. Запрос
select * from MyTable where FIO like '%иванов%иван%'
выполнялся 0.2 секунды. Неужто мыскль настолько тормознее?
Вам, как я понимаю, нужен поиск по сложным документам.
Эластиксерч весьма пригож именно для этого - разные атрибуты, веса, очепятки и стемминг - работа с словоформами.
При этом он живуч под нагрузками.
сколько записей не столь важно - вопрос скорее в объеме данных, по которым вам нужен поиск и требования к скорости - т.е. нужна ли вам эта мощь.