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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Поиск по сайту
 
 автор: gwest   (15.03.2006 в 16:48)   письмо автору
 
 

Подскажите как пишется поиск. Интересует не столько код сколько техническая сторона(алгоритм).
Заранее спасибо!

   
 
 автор: Loki   (15.03.2006 в 17:01)   письмо автору
 
   для: gwest   (15.03.2006 в 16:48)
 

Зависит от того, на чем у вас сайт: БД или файлы.
Если БД, то все просто: поиск осуществляется средствами самой БД.
Если на файлах, то вариантов несколько:
1. в тупую открывать каждый файл и искать в нем нежные последовательности
2. периодически проводить индексацию сайта: то есть открывать файлы, разбирать их на ключевые слова и записывать их в индексный файл. В дальнейшем, поиск производить только по индексному файлу
3. перевести сайт на БД.

   
 
 автор: Jura   (26.03.2006 в 16:17)   письмо автору
 
   для: Loki   (15.03.2006 в 17:01)
 

А можно подробнее пояснить про поиск, виды поиска, критерии выбора. Знаю что он бывает индексируемый и нет. Буду благодарен за любуи информацию.
Если еще и с примерами, то вообще будет супер..

   
 
 автор: cheops   (26.03.2006 в 18:03)   письмо автору
 
   для: Jura   (26.03.2006 в 16:17)
 

Вот несколько тем, посвящённых поиску
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=514
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=148
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=807
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=6620
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=5828
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=6439
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=5311
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=4699
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=3696
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=4797

   
 
 автор: Jura   (26.03.2006 в 18:34)   письмо автору
 
   для: cheops   (26.03.2006 в 18:03)
 

Спасибо, когда изучу вернусь.

   
 
 автор: Sergey89   (26.03.2006 в 16:35)   письмо автору
 
   для: Loki   (15.03.2006 в 17:01)
 

А как реализовать поиск средствами БД? Ну например как на этом форуме.

   
 
 автор: Jura   (26.03.2006 в 16:48)   письмо автору
 
   для: Sergey89   (26.03.2006 в 16:35)
 

Есть такая замечательная книжка "PHP5 Практика создания сайтов". Там написано слишком мало про поиск, но наметки на поиск нарыл.

Люди, давайте объединим усилия и сконцентрируем весь материал по поиску в базах и файлах на этом форуме?

1. http://phpclub.ru/detail/article/mysql_search Безопасный и удобный поиск в mySQL
2. http://dev.mysql.com/doc/refman/4.0/ru/fulltext-search.html FULLTEXT поиск мануал MYSQL
3. http://www.securitylab.ru/contest/212083.php SQL инъекция в MySQL сервере

Вот некоторые статьи которые заслуживают внимания.
Может еще кто? что-нить подскажет..
Очень нужна инфа. Очень. Про поиск, полнотекстовый, морфологический, поиск по базе, по файлам, про индексацию, ее виды.

ХЕЛП....

   
 
 автор: Jura   (26.03.2006 в 19:17)   письмо автору
 
   для: Jura   (26.03.2006 в 16:48)
 

Поправьте меня, если я чего-то не понял. Из всего прочненного я понял что есть:
1. Простейший поиск like
2. Аналог с использованием REGEXP
3. Полнотекстовый поиск, т.е. все поля, в которых производится поиск должны быть индексируемы как FULLTEXT

Поясните мне плиз! Как организовать поиск с множеством слов, т.е. таблица содержит несколько полей id_th | th_value_varchar255| bigtext_longtext произвожу поиск в понях втором и третьем.

Как учитывать логику? (все слова или в зависимости от релевантности по каждому слову - логическое ИЛИ)
и возможно - ли искать не слова целиком, а части слов при полнотекстовом поиске. Я вот проэкпериментировал и увы... Может я что-то делаю не так?

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

   
 
 автор: cheops   (27.03.2006 в 02:00)   письмо автору
 
   для: Jura   (26.03.2006 в 19:17)
 

>Поправьте меня, если я чего-то не понял. Из всего
>прочненного я понял что есть:
>1. Простейший поиск like
>2. Аналог с использованием REGEXP
>3. Полнотекстовый поиск, т.е. все поля, в которых
>производится поиск должны быть индексируемы как FULLTEXT
Да

>Поясните мне плиз! Как организовать поиск с множеством слов,
>т.е. таблица содержит несколько полей id_th |
>th_value_varchar255| bigtext_longtext
произвожу поиск в
>понях втором и третьем.
А как ищите? Какой запрос используете и как поля проиндексировали?

   
 
 автор: Jura   (27.03.2006 в 14:35)   письмо автору
 
   для: cheops   (27.03.2006 в 02:00)
 

Значит так, таблица.


CREATE TABLE test_s (
  id_th int(32) NOT NULL auto_increment,
  theme_name varchar(250) default NULL,
  module_text text,
  PRIMARY KEY  (id_th),
  FULLTEXT KEY NewIndex (theme_name)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;


INSERT INTO test_s VALUES("1", "Прогресс", "тут файл большущий №1");
INSERT INTO test_s VALUES("2", "Прогрессивный веб", NULL);
INSERT INTO test_s VALUES("3", "Интернет", NULL);
INSERT INTO test_s VALUES("4", "Интересная статья", NULL);
INSERT INTO test_s VALUES("5", "Интерактивный мир", NULL);
INSERT INTO test_s VALUES("6", "Очень интересная тема", NULL);
INSERT INTO test_s VALUES("7", "не интересная тема", NULL);



Текст поиска. Для примера берем часть слова "интер"

SELECT *,MATCH (theme_name) AGAINST ('интер') as relevant from test_s WHERE MATCH (theme_name) AGAINST ('интер');


Тредуется, чтобы поиск нашел все, где он встречается. Полагаю, что я что-то делаю не так.
Здесь нужен like поиск?

   
 
 автор: Jura   (27.03.2006 в 14:43)   письмо автору
 
   для: Jura   (27.03.2006 в 14:35)
 

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


SELECT * FROM 'test_s'  WHERE 'theme_name' like '%интер%'


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

Если не сложно, поясните плиз разницу между полнотекстовым поиском и like. Увы, что-то не улавливаю. Но знаю, что возможностей у полнотекстового поболее будет.

Жду ваших ответов. Заранее благодарен.

   
 
 автор: Loki   (27.03.2006 в 16:18)   письмо автору
 
   для: Jura   (27.03.2006 в 14:43)
 

Лучше уж тогда не с like а IN BOOLEAN MODE. В этом случае, можно использовать еще много разных ключей для поиска. А релевантность можно запросить отдельным столбцом... Правда, мы тут это обсуждали и, похоже что не во всех версиях mysql это прокатит.

   
 
 автор: cheops   (27.03.2006 в 17:29)   письмо автору
 
   для: Jura   (27.03.2006 в 14:35)
 

Можно воспользоваться, как подсказывает Loki, логическим режимом поиска
SELECT * from test_s WHERE MATCH (theme_name) AGAINST ('интер*' IN BOOLEAN MODE);

   
 
 автор: Jura   (02.04.2006 в 15:01)   письмо автору
 
   для: cheops   (27.03.2006 в 17:29)
 

Спасибо, попробую разобраться с IN BOOLEAN MODE

   
Rambler's Top100
вверх

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