Показать сообщение отдельно
Старый 05.04.2005, 18:36     # 6
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
все-таки решил испробовать задумку с хранением не только отдельных слов, но и частей слов.

вот что получилось:

реальный запрос, поиск телефона Samsung d500(точнее подсчет предложений в базе по этому телефону(чтобы было посложнее, я добавил побольше ключевых слов).
Код:
SELECT count(distinct sci.str_cat_itm_ID) as cnt FROM store_pword as sw0 inner join store_pword as sw1 on sw0.str_cat_itm_ID = sw1.str_cat_itm_ID inner join store_pword as sw2 on sw1.str_cat_itm_ID = sw2.str_cat_itm_ID inner join store_pword as sw3 on sw2.str_cat_itm_ID = sw3.str_cat_itm_ID inner join store_category_item as sci on sw0.str_cat_itm_ID = sci.str_cat_itm_ID inner join store_category as sc on sci.str_cat_ID = sc.str_cat_ID where sc.str_cat_END_DATE>=1112712382 and sw0.str_PWORD like 'sung%' and sw1.str_PWORD like 'd500%' and sw2.str_PWORD like 'sgh%'
время выполнения запроса:
0.14 sec.(запрос помещен в файл и вызывается из консоли).

результат: 1000 записей.

теперь аналогичный запрос, но поиск обычным like:

Код:
SELECT count(sci.str_cat_itm_ID) as cnt FROM store_category_item as sci inner join store_category as sc on sci.str_cat_ID = sc.str_cat_ID where sc.str_cat_END_DATE>=1112712382 and sci.str_cat_itm_TITLE like '%sung%' and sci.str_cat_itm_TITLE like '%d500%' and sci.str_cat_itm_TITLE like '%sgh%'
время выполнения запроса:
0.25-0.27 sec.

результат: 1000 записей.

размеры таблиц:

store_category_item: 110.000
store_pword: 657.000

размер минимальной словоформы - 4 символа, т.е. в поиске я еще не ввел это ограничение, но ввел его при индексации, т.е. например:

если слово меньше или равно 4, то мы вносим его как есть в таблицу store_pword, если больше 4, тогда:

Код:
if ($wordLen >= 3)
{
	for($i=0;$i<$wordLen-3;$i++)
	{	
		//insert
		substr($titleWord,$i);																						
	}						
}
p.s.

есть еще идея попробовать полнотекстный поиск по такой таблице и сравнить его с like, но думаю именно такой like будет быстрее.

кстати, кто может сказать, что лучше:
хранить текст в одной записи, типа:
это большой кусок текста (text)
или хранить его типа:
это (varchar)
большой
кусок
текста

при том, что используется полнотекстный индекс и поиск?
__________________
убрано по просьбе администратора
Sheryld вне форума