|
|
|
| Подскажите как пишется поиск. Интересует не столько код сколько техническая сторона(алгоритм).
Заранее спасибо! | |
|
|
|
|
|
|
|
для: gwest
(15.03.2006 в 16:48)
| | Зависит от того, на чем у вас сайт: БД или файлы.
Если БД, то все просто: поиск осуществляется средствами самой БД.
Если на файлах, то вариантов несколько:
1. в тупую открывать каждый файл и искать в нем нежные последовательности
2. периодически проводить индексацию сайта: то есть открывать файлы, разбирать их на ключевые слова и записывать их в индексный файл. В дальнейшем, поиск производить только по индексному файлу
3. перевести сайт на БД. | |
|
|
|
|
|
|
|
для: Loki
(15.03.2006 в 17:01)
| | А можно подробнее пояснить про поиск, виды поиска, критерии выбора. Знаю что он бывает индексируемый и нет. Буду благодарен за любуи информацию.
Если еще и с примерами, то вообще будет супер.. | |
|
|
|
|
|
|
|
|
для: cheops
(26.03.2006 в 18:03)
| | Спасибо, когда изучу вернусь. | |
|
|
|
|
|
|
|
для: Loki
(15.03.2006 в 17:01)
| | А как реализовать поиск средствами БД? Ну например как на этом форуме. | |
|
|
|
|
|
|
|
для: 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 в 16:48)
| | Поправьте меня, если я чего-то не понял. Из всего прочненного я понял что есть:
1. Простейший поиск like
2. Аналог с использованием REGEXP
3. Полнотекстовый поиск, т.е. все поля, в которых производится поиск должны быть индексируемы как FULLTEXT
Поясните мне плиз! Как организовать поиск с множеством слов, т.е. таблица содержит несколько полей id_th | th_value_varchar255| bigtext_longtext произвожу поиск в понях втором и третьем.
Как учитывать логику? (все слова или в зависимости от релевантности по каждому слову - логическое ИЛИ)
и возможно - ли искать не слова целиком, а части слов при полнотекстовом поиске. Я вот проэкпериментировал и увы... Может я что-то делаю не так?
И еще, пожскажите как организовать морфологический поиск, с изменением окончаний слов. Увы в этом вопросе даже идейки нету. | |
|
|
|
|
|
|
|
для: Jura
(26.03.2006 в 19:17)
| | >Поправьте меня, если я чего-то не понял. Из всего
>прочненного я понял что есть:
>1. Простейший поиск like
>2. Аналог с использованием REGEXP
>3. Полнотекстовый поиск, т.е. все поля, в которых
>производится поиск должны быть индексируемы как FULLTEXT
Да
>Поясните мне плиз! Как организовать поиск с множеством слов,
>т.е. таблица содержит несколько полей id_th |
>th_value_varchar255| bigtext_longtext произвожу поиск в
>понях втором и третьем.
А как ищите? Какой запрос используете и как поля проиндексировали? | |
|
|
|
|
|
|
|
для: 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:35)
| | Полагаю, что было бы уместнее с Like, но сразу возникает вопрос как высислить релевантность, или она даже и не требуется?
SELECT * FROM 'test_s' WHERE 'theme_name' like '%интер%'
|
И еще, подскажите, если я ищу к примеру фразу "Прогресс веб" как мне лучше сделать сам запрос.
Идея есть в направлении разбиения фразы по пробелу и поиск по каждому слову.
Если не сложно, поясните плиз разницу между полнотекстовым поиском и like. Увы, что-то не улавливаю. Но знаю, что возможностей у полнотекстового поболее будет.
Жду ваших ответов. Заранее благодарен. | |
|
|
|
|
|
|
|
для: Jura
(27.03.2006 в 14:43)
| | Лучше уж тогда не с like а IN BOOLEAN MODE. В этом случае, можно использовать еще много разных ключей для поиска. А релевантность можно запросить отдельным столбцом... Правда, мы тут это обсуждали и, похоже что не во всех версиях mysql это прокатит. | |
|
|
|
|
|
|
|
для: Jura
(27.03.2006 в 14:35)
| | Можно воспользоваться, как подсказывает Loki, логическим режимом поиска
SELECT * from test_s WHERE MATCH (theme_name) AGAINST ('интер*' IN BOOLEAN MODE);
|
| |
|
|
|
|
|
|
|
для: cheops
(27.03.2006 в 17:29)
| | Спасибо, попробую разобраться с IN BOOLEAN MODE | |
|
|
|