Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Логгирование поисковых запросов для поиска с автодополнением


Recommended Posts

Коллеги, прошу направить мою мысль в правильном направлении. 

Разрабатываю для интернет магазина сервис сохранения поисковых запросов из строки поиска в таблицу БД. Поиск на сайте с автодополнением - т.е. после каждого введённого символа происходит ajax обращение в php файл, там обрабатывается, и на фронтэнд возвращается результат. Тупое сохранение запроса каждый раз выглядит некрасиво: в таблице результатов получим список вида: ard, ardu, ardui и т.д. (от полного слова Arduino) от одного ip и с минимальной временной разницой. Подскажите пожалуйста алгоритм как отфильтровать эти промежуточные результаты, чтобы сохранить в БД только полностью введённое слово?

Надіслати
Поділитися на інших сайтах


7 минут назад, veneris1991 сказал:

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

 

не записывать то что меньше какого-то количества символов

Надіслати
Поділитися на інших сайтах

37 минут назад, spectre сказал:

 

не записывать то что меньше какого-то количества символов

Ну тогда все равно большая вероятность что будет много кусков одного и того же слова в истории.

Надіслати
Поділитися на інших сайтах


38 минут назад, chukcha сказал:

думай-Те.

например, залействуйте сессию

Ну так я и написал сюда чтобы на мысль натолкнули. Задействуя php, я не смогу предугадать, прилетит ли после пришедшего запроса еще один, более полный, или нет. Ровно как и не могу запустить на php таймер, который отсчитает некий интервал и, если за это время ничего не пришло, запишет результат в таблицу. Т.е. надо думать в сторону JS..или я не прав и есть все таки варианты на php? 

Конечно есть ещё тупой вариант писать все подряд в БД, а потом удалять из неё лишние строки, но так курочить БД - совсем не изящное решение.

Надіслати
Поділитися на інших сайтах


СЕССИЮ, а не php
У вас автомат быстрого поиска  может перейти в 2 состояния

На страницу поиска
И на страницу найденного товар

Надіслати
Поділитися на інших сайтах

12 минут назад, chukcha сказал:

СЕССИЮ, а не php
У вас автомат быстрого поиска  может перейти в 2 состояния

На страницу поиска
И на страницу найденного товар

А еще он вываливает поисковые результаты прямо в div под собой, и с каждым введённым символом они могут быть разные. Или результатов вообще может не быть, если ничего похожего нет на сайте. Что мне считывать из сессии, если пользователь никуда не перешёл? Вот ввёл он запрос "Велосипед", и поиск у него выдал пустой результат. А мне надо сохранить этот запрос, желательно одном словом, а не "вел", "вело", "велос" и т.д., дабы знать, что покупатели тут хотят велосипеды покупать

Надіслати
Поділитися на інших сайтах


Ну вот зачем мне вам это рассказывать, когда у меня это реализовано?
 

Я вам рассказл, как сделано у меня.

Надіслати
Поділитися на інших сайтах

У меня есть модуль История Поиска
https://opencartforum.com/files/file/3021-istoriya-poiska/

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

Надіслати
Поділитися на інших сайтах

Какие сессии, какие счетчики символов?)

Просто пишите из контроллера product/search

и/или вызывайте аяксом метод записи после секунды простоя набора из того же автокомплита

и/или отлавливайте клик по товару из списка автокомплита и до перехода на товар отправляйте тот же запрос с добавлением кейворда

и/или при blur на input отправляйте всё тот же запрос ну вы поняли

 

Надіслати
Поділитися на інших сайтах

9 минут назад, SooR сказал:

Какие сессии, какие счетчики символов?)

Просто пишите из контроллера product/search

и/или вызывайте аяксом метод записи после секунды простоя набора из того же автокомплита

и/или отлавливайте клик по товару из списка автокомплита и до перехода на товар отправляйте тот же запрос с добавлением кейворда

и/или при blur на input отправляйте всё тот же запрос ну вы поняли

 

идея в том что вопрос о живом поиске
прилетает какая-то фраза, он ее логирует
и не важно какое время простоя

Надіслати
Поділитися на інших сайтах

1 минуту назад, chukcha сказал:

идея в том что вопрос о живом поиске
прилетает какая-то фраза, он ее логирует
и не важно какое время простоя

Согласен, но забивать сессии всем подряд - не лучший выход. Всё решается js на раз-два. Можно же отследить любое поведение

Надіслати
Поділитися на інших сайтах

1 минуту назад, SooR сказал:

Согласен, но забивать сессии всем подряд - не лучший выход. Всё решается js на раз-два. Можно же отследить любое поведение

Не знаю, почему забивать? в сессию кладется последняя фраза, можно и в куки :)

Насчет забивать...
Посмотрите как сессия забивается при оформлении заказа.

 

Или  Например вы смотрели

Надіслати
Поділитися на інших сайтах

Куки тоже не резиновые. 

25 минут назад, chukcha сказал:

в сессию кладется последняя фраза

Длину которой никто не контролирует

 

26 минут назад, chukcha сказал:

Посмотрите как сессия забивается при оформлении заказа.

Да плавали мы :) поэтому и жалко её, учитывая, как она хранится и как чистится

 

29 минут назад, chukcha сказал:

Или  Например вы смотрели

"Вы смотрели" - отдельная история. По-моему лучше хранить в localStorage + DB при логине.

 

Короче, в данном конкретном примере можно обойтись без сессий не потеряв при этом ничего.

Как это сделать я доступно описал.

Надіслати
Поділитися на інших сайтах

13 часов назад, SooR сказал:

и/или вызывайте аяксом метод записи после секунды простоя набора из того же автокомплита

и/или отлавливайте клик по товару из списка автокомплита и до перехода на товар отправляйте тот же запрос с добавлением кейворда

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

установит 2-3 секунды? А если пользователь за это время закроет вкладку браузера? 
А если пользователь вообще не кликнет по товару? например случай когда запрос ничего не нашел, что очень часто бывает

Получается что будут какие-то запросы которые вообще не будут записаны. 
+ обрабатывать все эти клики на стороне клиента крайне проблемно, особенно если пишешь модуль, который должен работать на всех сайтах, ведь шаблоны у всех разные, поисковый строки размещены в разных местах, иногда они появляются после клика по какой-то иконке поиска, часто поиски разные для десктопной и мобильной версий сайта + у всех установлены разные модули поиска с подсказками со своей html структурой и своей логикой работы и обработкой этих же самых кликов. И как весь этот зоопарк обработать на стороне клиента чтобы работало у всех?
да и каком "забивании сессии" речь, если там храниться обычно аж одно-два слова длиной в несколько байт?

Надіслати
Поділитися на інших сайтах

9 часов назад, sv2109 сказал:

а если после секунды простоя пользователь решит добавить что-то поисковый запрос?

За эту секунду сработает запрос на поиск, вот по его ответу либо сразу в контроллере добавлять.

 

9 часов назад, sv2109 сказал:

А если пользователь за это время закроет вкладку браузера? 

Так и будет.

 

9 часов назад, sv2109 сказал:

А если пользователь вообще не кликнет по товару?

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

 

9 часов назад, sv2109 сказал:

например случай когда запрос ничего не нашел, что очень часто бывает. Получается что будут какие-то запросы которые вообще не будут записаны. 

При чем здесь результаты поиска к записи запроса?

 

9 часов назад, sv2109 сказал:

И как весь этот зоопарк обработать на стороне клиента чтобы работало у всех?

Может мне вам еще модуль написать для продажи в массы? :) куда-то вас понесло за пределы сабжа.

 

В 17.08.2020 в 17:12, veneris1991 сказал:

Разрабатываю для интернет магазина сервис сохранения поисковых запросов из строки поиска в таблицу БД.

 

9 часов назад, sv2109 сказал:

да и каком "забивании сессии" речь, если там храниться обычно аж одно-два слова длиной в несколько байт?

Напишите зачем здесь сессии. Как вы видите их использование, цепочку.

  • +1 1
Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.