Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Организация безопасного поиска по названию товара

Сообщения:  [1-10]    [11-20]   [21-30]  [31-39] 

 
 автор: TetRiska   (19.11.2011 в 15:07)   письмо автору
 
   для: cheops   (18.11.2011 в 20:21)
 

спасибо

  Ответить  
 
 автор: cheops   (18.11.2011 в 20:21)   письмо автору
 
   для: TetRiska   (18.11.2011 в 20:10)
 

В любом случае под ключевые слова лучше делать отдельную таблицу.

  Ответить  
 
 автор: TetRiska   (18.11.2011 в 20:10)   письмо автору
 
   для: cheops   (18.11.2011 в 19:31)
 

из названий как по мне это не совсем то, много хлама может попасть

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

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

так а все таки, я не пойму, мне делать отдельную таблицу под ключевики со списком ид товаров (по запросу ищем ключи, берем их списки ид и по ним выбираем с основной таблицы товары) или делать доп. поле в товарах и по нему делать LIKE 'искомое слово%' поиск

  Ответить  
 
 автор: cheops   (18.11.2011 в 19:31)   письмо автору
 
   для: TetRiska   (18.11.2011 в 19:10)
 

А и не надо их делать, во-первых можно отобрать их из названий, можно поставить ловушку и отбирать их запросов пользователей. Да операторы вам точнее ссылки расставят (если не ошибутся). Однако, можно начать с полнотекстового поиска, но постепенно наращивать базу ключевых слов, для которой регулярно осуществлять по cron медленный, но безошибочный LIKE-поиск. Тогда при следующем обращении (а ищут примерно одно и тоже), нагрузка на базу данных будет снижаться. А у операторов и без ключевых слов забот полон рот, тем более они все-равно все не подберут.

  Ответить  
 
 автор: TetRiska   (18.11.2011 в 19:10)   письмо автору
 
   для: cheops   (18.11.2011 в 18:53)
 

На данный момент нет возможности (времени у операторов) под каждый товар, а их более 25 тищ делать целевые ключевые слова. Когда появится время я им сделаю поле и пусть развлекаются. Т.е. я пока остановился на полнотекстовом по таблице товаров по полю название товара.

Для будущего какой вариант предпринять?
1 - делать отдельную таблицу для ключевых слов со списком ид товаров для каждого ключа, после выборки использовать этот список ид для выборки из таблицы товаров
2 - убрать fulltext индекс из таблицы товаров по полю название товара, создать поле для ключей VARCHAR(255) и использовать оператор LIKE 'искомое слово%'

  Ответить  
 
 автор: cheops   (18.11.2011 в 18:53)   письмо автору
 
   для: TetRiska   (18.11.2011 в 18:40)
 

Дело в том, что когда у вас будет отдельно поле с ключевым словом (длиной не более 255 символов), вы сможете работать эффективно при помощи LIKE. В этом и фокус, что LIKE особенно с двумя символами % в начале и конце шаблона - очень не эффективен, так как ему этот шаблон нужно протаскивать по длительным описанием. А когда у вас в поле лежит готовое ключевое слово - его эффективность резко возрастает, особенно, когда у вас есть возможность убрать % из начала шаблона. На самом деле и полнотекстовый поиск так работает, он просто извлекает все уникальные слова (за исключением стоп-слов и очень часто используемых слов) и выстраивает их в индекс по алфавиту. Когда вам нужно какое-то слово, он вместо того, чтобы лопатить все статьи и описания, просто быстро находит ключевое слово и пользуется ссылками из индекса. Вы можете делать тоже самое, при этом не тратить лишнее место на полнотекстовый индекс (который зачастую жрет столько же, сколько сами данные).

  Ответить  
 
 автор: TetRiska   (18.11.2011 в 18:40)   письмо автору
 
   для: cheops   (18.11.2011 в 18:27)
 

и точно, я даже не задумался, представим 2 ситуации, когда таблица товаров содержит 500 000 записей

1 - создадим в таблице доп. поле под ключевики и сделаем его fulltext
2 - создадим доп. таблицу как я представил выше и сделаем fulltext на поле key

Рассматриваем естественно полнотекстовый поиск.

При первом варианте мы перелопачиваем довольно большой объем данных в поисках введенных ключевых слов в поиск.

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

Подведу итог второй вариант быстрее будет. Так ли?

  Ответить  
 
 автор: cheops   (18.11.2011 в 18:27)   письмо автору
 
   для: TetRiska   (18.11.2011 в 18:22)
 

Да, все верно, в общем это и есть полнотекстовый поиск.

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

  Ответить  
 
 автор: TetRiska   (18.11.2011 в 18:22)   письмо автору
 
   для: cheops   (18.11.2011 в 18:09)
 

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

т.е. таблица примерно такая: ид, ключ, ид товаров (через запятую)

после ввода в поиск мотоцикл Suzuki разбиваем строку по пробельно и ищем эти 2 слова в таблице, получаем списки ид товаров и потом выбираем эти товары с другой таблицы

все верно понял?

или можно создать поле в таблице товаров типа ключевые слова и после искать по нему?

  Ответить  
 
 автор: cheops   (18.11.2011 в 18:09)   письмо автору
 
   для: TetRiska   (18.11.2011 в 18:04)
 

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

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

  Ответить  

Сообщения:  [1-10]    [11-20]   [21-30]  [31-39] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования