Лента Мой малыш
Городские форумы
Автофорумы
Халявный
Домоводство
Проф. и бизнес форумы
Строительные форумы
Технофорумы
Собачий форум
Велофорумы Нижнего Новгорода
Наши дети
Туризм, отдых, экстрим Творческий
Путешествия Спортивные форумы
Нижегородская область Недвижимость
Форумы по интересам
Частные форумы Форумы домов Жилые районы
Отзывы и предложения (техподдержка)
Реклама на NN.RU
+7 (831) 261-37-60
Техподдержка Полная версия

Требуется прикрутить autocomplete

кто сможет (не бесплатно) на существующий сайт прикрутить autocomplete? должно получиться что то похожее.
искать не только в названиях организаций. Искать еще и в наименованиях компонентов.
[gallery]http://www.nn.ru/~gallery797609?MFID=888597[/gallery]
как на примере уже при первых буквах в поисковой строке, предлагает варианты выбора. или из организаций или из компонентов
0
Ответить
а серверная часть какая?
0
Ответить
я не программист, поэтому сразу прошу простить за мою не грамотность.
стоит на Apache, на DigitalOcean.
это нужно сделать для агрегатора электротехники.
0
Ответить
Все равно непонятно)
Надо хотя бы ссылку на какую-нибудь страницу. Возможно это на php написано.
Собственно вся задача состоит из двух частей:
1) К текстбоксу привязять Javascript + AJAX запрос на сервер
2) Серверный метод, который делает сам поиск и возвращает ссылки
Если сайт писался руками, то в принципе понятно как прикручивать, а если каким-то движком генерился, то тут надо искать специалиста по движку.
0
Ответить
там php 5.4.4, wappalyzer говорит.
0
Ответить
на сервере PHP, база думаю SQL'ная, скорее всего MySQL.
можно тупо через SELECT ... WHERE ... LIKE запрос сделать по полям, либо если хочется полнотекстовый поиск, то MATCH ... AGAINST
для ограничения совпадений рекомендую либо искать когда набрано не менее 3-х букв, либо использовать LIMIT в запросе

на клиенте jQuery, к полю привязаться не проблема (на onchange смотреть, что что-то набрано и делать запрос).

движок какой - пофиг, т.к. можно "сбоку" отдельный скрипт написать просто.
0
Ответить
На примере в клиенте сидит Keen JS, что довольно мощная вещь для организации запросов и кэша.
Дальше всё зависит от того, как и на чём построена БД.

Сильно нагруженный (подвисающий) autocomplete будет не помогать, а раздражать пользователя.
Нужен кэш. Строить грамотно кэш - задача не простая. Можно легко лешиться части позиций в списке.
0
Ответить
Простой like убьет производительность.
Не знаю, как с mysql, но на других базах делал словарь, связанный с изначальным списком, и индексацию на префиксный like. Работало неплохо.

На postgres есть вообще FTS как раз для полнотекстового поиска (правда, мне не совсем подошло).
0
Ответить
alxumuk2 писал(а)
префиксный like

это когда % добавляется в конце поискового слова? ну да я так и предложил...
0
Ответить
Sergey Pravodelov писал(а)
Нужен кэш.

memcached / redis.io ?
0
Ответить
Да.
Проблема обычно в том, что надо искать по всем словам в строке.
Первый же пример из первого же попавшегося магазина:
"17.3" Ноутбук DEXP Ares E101 серый"
Просто like ноутбук% или Ares% (наиболее очевидные варианты) тут уже не проходит.

Для моих целей было достаточно искать по началу слова, или по префиксу всей строки, но, как правило, может быть сложнее
"ноутбук Ares" - вполне разумный запрос. А тут уже надо, как минимум, разбиение поисковой строки на токены, разбиение наименований на токены с индексацией и прочая хрень по сведению.


В общем, колхоз сделать не так просто, как кажется. Так что для "общих целей" лучше посмотреть в сторону баз, который поддерживают индексацию для текстового поиска и задрачиваться с ними.

UPD: Ну, или формализировать критерии поиска для конкретной предметной области, и наколхозить именно для нее. Так даже может получиться лучше, но такую формализацию сделать - не в лужу пукнуть.
0
Ответить
а если Sphinx заюзать?
0
Ответить
Ну на типа того. Я бы на Redis поставил.
В общем работа с данными, БД и её сервером должна решаться до autocomplete :)
0
Ответить
alxumuk2 писал(а)
Просто like ноутбук% или Ares% тут уже не проходит

зачем "или"?

%ноутбук%Ares%
0
Ответить
Угу, и полный неинднксированный поиск по всей базе с требованием выдать результат за несколько секунд.
Ню-ню
Плавали, знаем...
0
Ответить
Ну, я и говорил, что лучше воспользоваться продуктами, которые эту проблему решают.
Вроде, я его видел, когда колхозил (дело было месяцев 8 назад, а прототип надо было делать буквально за недели), но что-то не подошло. Так же как и с FTS в Postgresql.

Если интересно - большинство проблем, которые возникали с полнотекстовыми решениями:
- нужно было выдавать хоть какие-то результаты по первым буквам (кто-то, вроде, мог это делать, но большинство дает тупо по словарям)
- проблемы с разными языками/стоп-словами и прочее. Это зашибись для поиска в документах, где это реально важно, чтобы по букве 'a' не выдавалось все, ибо артикль везде, но надо было искать по "номенклатуре", где это не применимо.
- результаты должны были ранжироваться не только по релевантности "текстовой", но и по дополнительному "приоритету" со стороны (ну, типа популярности запроса).
0
Ответить
Кстати, "Ares ноутбук" уже не сработает, что тоже немаловажно.
0
Ответить
Хорошо, например, Гуглу с кешем. Хомячки бОльшую часть популярных запросов протащат в кеш так, что сколь-либо значимый процент пользователей не заметит первой задержки.

Но вот если хомячков мало, и каждый ищет свое - процент непопадания в кеш будет полной жопой. Вот как ее решить - в этом весь вопрос.

З.Ы. Гуглу вообще хорошо - у них уже и словарные базы есть, и синонимы и прочее... Но заказчик, я полагаю, совсем не Гугл :-)
0
Ответить
смотрите в сторону этого www.elastic.co
0
Ответить
alxumuk2 писал(а)
Угу, и полный неинднксированный поиск по всей базе

справочники типов устройств и вендоров это вся база? ну тогда да, по всей базе. и что мешает проиндексировать два поля?
0
Ответить
у нас написано руками на PHP, MySQL. autocomplete вовсе не обязательно.
сейчас в БД более 86 тыс. profsector.com/katalog. Планируется более 600 тыс. вероятно нужна какая то подготовка индексов БД.
0
Ответить
Like индексиуется только для префиксного поиска. Like a% сможет исполбзовать индекс. Like %a% нет, и будет полный перебор.
Если номенклатура небольшая - ок. Но я на 300к записей делал - там поиск будет минутами исчисляться
0
Ответить
alxumuk2 писал(а)
Но я на 300к записей делал - там поиск будет минутами исчисляться
Это на калькуляторе что ли? :о)
Вот есть под рукой MS SQL Server 2008 на серваке средней руки. Есть таблица на 400К записей. Запрос
select * from MyTable where FIO like '%иванов%иван%'
выполнялся 0.2 секунды. Неужто мыскль настолько тормознее?
0
Ответить
Да,, был не прав, 3,5М. На постгресе. Плюс там еще были критерии, но это, наверное, не так важно
0
Ответить
Да тут без разницы - с автокомплитом или без.
Вам, как я понимаю, нужен поиск по сложным документам.

Эластиксерч весьма пригож именно для этого - разные атрибуты, веса, очепятки и стемминг - работа с словоформами.
При этом он живуч под нагрузками.

сколько записей не столь важно - вопрос скорее в объеме данных, по которым вам нужен поиск и требования к скорости - т.е. нужна ли вам эта мощь.
0
Ответить