--}}
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем

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

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

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

движок какой - пофиг, т.к. можно "сбоку" отдельный скрипт написать просто.
alxumuk2
14.08.2015
Простой like убьет производительность.
Не знаю, как с mysql, но на других базах делал словарь, связанный с изначальным списком, и индексацию на префиксный like. Работало неплохо.

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

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

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


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

UPD: Ну, или формализировать критерии поиска для конкретной предметной области, и наколхозить именно для нее. Так даже может получиться лучше, но такую формализацию сделать - не в лужу пукнуть.
а если Sphinx заюзать?
alxumuk2
14.08.2015
Ну, я и говорил, что лучше воспользоваться продуктами, которые эту проблему решают.
Вроде, я его видел, когда колхозил (дело было месяцев 8 назад, а прототип надо было делать буквально за недели), но что-то не подошло. Так же как и с FTS в Postgresql.

Если интересно - большинство проблем, которые возникали с полнотекстовыми решениями:
- нужно было выдавать хоть какие-то результаты по первым буквам (кто-то, вроде, мог это делать, но большинство дает тупо по словарям)
- проблемы с разными языками/стоп-словами и прочее. Это зашибись для поиска в документах, где это реально важно, чтобы по букве 'a' не выдавалось все, ибо артикль везде, но надо было искать по "номенклатуре", где это не применимо.
- результаты должны были ранжироваться не только по релевантности "текстовой", но и по дополнительному "приоритету" со стороны (ну, типа популярности запроса).
Slepoi
14.08.2015
alxumuk2 писал(а)
Просто like ноутбук% или Ares% тут уже не проходит

зачем "или"?

%ноутбук%Ares%
alxumuk2
14.08.2015
Угу, и полный неинднксированный поиск по всей базе с требованием выдать результат за несколько секунд.
Ню-ню
Плавали, знаем...
Slepoi
16.08.2015
alxumuk2 писал(а)
Угу, и полный неинднксированный поиск по всей базе

справочники типов устройств и вендоров это вся база? ну тогда да, по всей базе. и что мешает проиндексировать два поля?
alxumuk2
17.08.2015
Like индексиуется только для префиксного поиска. Like a% сможет исполбзовать индекс. Like %a% нет, и будет полный перебор.
Если номенклатура небольшая - ок. Но я на 300к записей делал - там поиск будет минутами исчисляться
DimN
17.08.2015
alxumuk2 писал(а)
Но я на 300к записей делал - там поиск будет минутами исчисляться
Это на калькуляторе что ли? :о)
Вот есть под рукой MS SQL Server 2008 на серваке средней руки. Есть таблица на 400К записей. Запрос
select * from MyTable where FIO like '%иванов%иван%'
выполнялся 0.2 секунды. Неужто мыскль настолько тормознее?
alxumuk2
17.08.2015
Да,, был не прав, 3,5М. На постгресе. Плюс там еще были критерии, но это, наверное, не так важно
alxumuk2
14.08.2015
Кстати, "Ares ноутбук" уже не сработает, что тоже немаловажно.
На примере в клиенте сидит Keen JS, что довольно мощная вещь для организации запросов и кэша.
Дальше всё зависит от того, как и на чём построена БД.

Сильно нагруженный (подвисающий) autocomplete будет не помогать, а раздражать пользователя.
Нужен кэш. Строить грамотно кэш - задача не простая. Можно легко лешиться части позиций в списке.
Sergey Pravodelov писал(а)
Нужен кэш.

memcached / redis.io ?
Ну на типа того. Я бы на Redis поставил.
В общем работа с данными, БД и её сервером должна решаться до autocomplete :)
alxumuk2
14.08.2015
Хорошо, например, Гуглу с кешем. Хомячки бОльшую часть популярных запросов протащат в кеш так, что сколь-либо значимый процент пользователей не заметит первой задержки.

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

З.Ы. Гуглу вообще хорошо - у них уже и словарные базы есть, и синонимы и прочее... Но заказчик, я полагаю, совсем не Гугл :-)
смотрите в сторону этого https://www.elastic.co
ProfS
17.08.2015
у нас написано руками на PHP, MySQL. autocomplete вовсе не обязательно.
сейчас в БД более 86 тыс. profsector.com/katalog. Планируется более 600 тыс. вероятно нужна какая то подготовка индексов БД.
Да тут без разницы - с автокомплитом или без.
Вам, как я понимаю, нужен поиск по сложным документам.

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

сколько записей не столь важно - вопрос скорее в объеме данных, по которым вам нужен поиск и требования к скорости - т.е. нужна ли вам эта мощь.
ProfS
18.08.2015
есть задача, сделать поисковую строку на БД Profsector.com , по аналогии с octopart.com .
выше идет речь о том как все сделать
а кто это сделает - предлагайте.
нужен результат.
я из Н.Н. можно пообщаться очно.
Есть достаточно мощный компонент в jQuery https://jqueryui.com/autocomplete/
Если полный список небольшой, до полутысячи позиций, то можно сделать это за неск. минут работы (сам список).
ProfS
18.08.2015
сейчас уникальных наименований более 86 000 компонентов.
в планах будет более 600 000 компонентов.
пример наименований:
1. Шкаф распределительный силовой ШР11-73701 (ШРС1-20) 250A 5х63A ППН-33(NH00) IP31 УХЛ4 (компл.EKF)
2. Шкаф распределительный силовой ШР11-73702 (ШРС1-21) 250A 5х100A ППН-33(NH00) IP31 УХЛ4 (компл.EKF)
1. Вам надо сделать источник, который по подстроке выдает список предложений.
вида:
search.php?term=ШР1

Где в term будет передаваться набранный пользователем текст.
Этот источник должен выдавать json вида
[
{id:id-02801,label:ШР11-73701 (ШРС1-20) 250A 5х63A ППН-33(NH00) IP31 УХЛ4 (компл.EKF),value:ШР11-73701 (ШРС1-20) 250A 5х63A ППН-33(NH00) IP31 УХЛ4 (компл.EKF)},

{id:id-02802,label:ШР11-73702 (ШРС1-21) 250A 5х100A ППН-33(NH00) IP31 УХЛ4 (компл.EKF),value:....},

далее инициализация на странице будет следующая:

<script>
$(function() {
$( #search ).autocomplete({
source: search.php,
minLength: 2,
select: function( event, ui ) {
//ui.item -объект переданный в JSON выбранной строки
log( ui.item ?
Selected: + ui.item.value: Nothing selected, input was + this.value );
}
});
});
</script>


- в общем то все.
ЗЫ: код писал без отладки.
ProfS
18.08.2015
спасибо за бесплатный совет. :)
но я не грамотный.
Ищу профессионала, кто это реализует (за деньги).
Удачи.
alxumuk2
19.08.2015
Наверное, надо было эту ссылку дать сразу - не сообразили, но лучше поздно, чем никогда
www.nn.ru/community/biz/webdevelopers/
Стукнитесь туда. Аудитории форумов частично пересекаются, но найти исполнителя там может быть проще.
ProfS
19.08.2015
Спасибо alxumuk2.
я здесь первый раз и не знаю правил.
Но все же как то странно. много правильного сказали по этой теме и ни у кого не возникло желания это реализовать.
Могу предположить, что нет времени, не интересно возвращаться к задачам которые решали ранее, слишком много возни и .....
ВСЕМ спасибо. если кто то решится, пишите.
alxumuk2
19.08.2015
Это не правила. Просто так сложилось, что здесь обитают люди, которым не так интересна ваша задача с точки зрения заработка. Но задача сама по себе интересная, поэтому обсудили. Вам, ясен пень, от этого не горячо ни холодно. На webdevelopers, возможно, у вас больше шансов.
Все равно, удачи в поиске.
Justicer
20.08.2015
Это программерский форум. Профессиональным программерам и так неплохо платят - с сотню-две тысяч рублей в месяц. Возиться с мелкими заказами - просто не интересно (больше времени потратишь, чем денег заработаешь). Вот потрындеть - другое дело.

А в форуме вебдевелоперов сидит школота и студентота. У них завались свободного времени (причем бесплатного) и притом совсем нет денег. Там с радостью схватятся за любую подработку.

Как то так.
ProfS
20.08.2015
:)
Спасибо
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем
Последние темы форумов
Открытие Бизнеса в ОАЭ. Полное сопровождение

Здравствуйте! Меня зовут Александра, и я открою для Вас Компанию в ОАЭ с полное юридическим сопровождением. Большой опыт работы в этой...

Формы для дорожных плит П30.18

Формы для дорожных плит П30.18 Оборудование для производства дорожных плит. Дорожные плиты - железобетонные изделия, применяемые для...
Цена: 162 000 руб.

Пресс-пакетировщик вертикальный Кубер-4ВА из стали AISI 304

Габарит формируемой кипы, мм 300х600х400 (ВхШхД) Габарит пресса, мм 1940х750х580 (ВхШхГ) Габарит модульной...
Цена: 793 000 руб.

Банковский счет в ОАЭ под ключ

Здравствуйте! Меня зовут Александра, и я помогу открыть Вам банковский счет в ОАЭ. Все услуги выполняю "под ключ". Гарантирую...

Программист 1С НПП ПРО-М
от 110 000 руб.
Высшее образование, стаж работы 3-5 лет, полная занятость
Frontend-разработчик Profit Search
40000 -
50000 руб.
Стаж работы 3-5 лет, частичная занятость
Разработчик .net Profit Search
70000 -
100000 руб.
Неполное среднее образование, стаж работы 3-5 лет, полная занятость
Программист-разработчик Full-Stack ГК "Kolobox"
70000 -
100000 руб.
Высшее образование, стаж работы более 5 лет, полная занятость