Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Пишем поиск на основании статей сайта
Форумы портала PHP.SU » Разное » Обсуждение статей » Пишем поиск на основании статей сайта

Страниц (1): [1]
 

1. de'vovan - 21 Февраля, 2007 - 08:01:26 - перейти к сообщению
Доброе утро!
Пишу "поиск" для своего сайта, за основу взял вашу статью. Прошу вашей помощи, я недавно знаком с PHP и многое ещё не понятно. Собственно первый вопрос возник практически сразу при составлении механизма работы скрипта:
1. Открываем опр. таблицу базы данных, считываем поле(напр. text) первой записи, заносим в переменную( пусть будет $articles1 ).
2. Убираем из текста в переменной $articles1 "мусор" : html теги, знаки препинания, символы, слова короче 3 букв и т.п.
3. Разбиваем полученный текст на слова и заносим в массив, затем записываем эти слова в индекс со счетчиком(для вывода результатов по релевантности).

С этим этапом я вроде разобрался, но мне не понятно, такой индекс нужен для каждой записи в базе данных, или же один для всей таблицы? И, как во втором случае (индекс для всей таблицы) строится ссылка на опр. запись в базе данных?
Вроде подробно изложил, надеюсь на вашу помощь.
2. Viper - 21 Февраля, 2007 - 08:34:06 - перейти к сообщению
по идее для каждой записи нужен индекс если нужно искать по части фразы или по отдельному слову
3. de'vovan - 21 Февраля, 2007 - 10:00:13 - перейти к сообщению
Viper пишет:
по идее для каждой записи нужен индекс если нужно искать по части фразы или по отдельному слову

То есть я могу специально для поиска создать в каждой записи со статьёй, список ключевых слов в отдельном поле? Но как в индексе отобразить кол-во повторений? Че та я ниче не понял...
4. Viper - 21 Февраля, 2007 - 11:43:09 - перейти к сообщению
делается отдельная таблица вида
word /word_id /common
primary /index /tiny
слово /word_id /сколькосовпадений

и ещё таблица вида
id_title /word_id /match
index /index /tinyint
статья где находиться искомое слово /word_id /сколькосовпадений

примерно так.

т.е. получиться что у тебя есть база слов из статей с ключами и соответсвием найденых слов к конкретной статье содержащей искомое слово + отдельно количество найденых слов из запроса
5. de'vovan - 21 Февраля, 2007 - 12:49:48 - перейти к сообщению
Viper пишет:
делается отдельная таблица вида
word /word_id /common
primary /index /tiny
слово /word_id /сколькосовпадений

и ещё таблица вида
id_title /word_id /match
index /index /tinyint
статья где находиться искомое слово /word_id /сколькосовпадений

примерно так.

т.е. получиться что у тебя есть база слов из статей с ключами и соответсвием найденых слов к конкретной статье содержащей искомое слово + отдельно количество найденых слов из запроса
Не понялНе понял
Сори, не могу понять структуру таблиц и принцип работы. Однако
А если вобщем, вот скрипт создал индекс для опр. статьи в виде файла или таблицы с полями "слово" и "кол-во_повторений". Допустим таким скриптом я обошел все статьи и для каждой создал индекс, а что дальше? Писать скрипт, который перебирает эти индексы и ищет наибольшее число повторений искомого слова? Я вообще хоть правельно мыслю, или же есть более простые решения организации поиска на сайте? Мастера что скажете?А?!
6. Viper - 21 Февраля, 2007 - 13:54:29 - перейти к сообщению
ну я не мастер Улыбка
ищем мы не число повторений, а сопоставляем индекс конкретного искомого слова с индексом статьи. и идексируем в этих таблицах не статьи, а именно из статей выбираем слова и индексируем их(иначе не понятно будет какое слово в какой статье находиться), а дальше сопоставляем.

пример:
запрос -> ищем слово + id -> сопоставляем id слова с id статьи -> выдаем статью

ЗЫ! id_title статья с индексом 2, word_id слово из первой таблицы. а в первой таблице - word искомое слово из конкретной статьи, word_id индекс используемый для сопоставления в 2 таблице.

Прошу прощения за "корявое" объяснение Улыбка
7. de'vovan - 21 Февраля, 2007 - 14:00:06 - перейти к сообщению
Все равно спасибо за внимание!
Только я не понял вот этого:
Viper пишет:
ЗЫ! id_title статья с индексом 2, word_id слово из первой таблицы. а в первой таблице - word искомое слово из конкретной статьи, word_id индекс используемый для сопоставления в 2 таблице.

8. valenok - 21 Февраля, 2007 - 17:22:38 - перейти к сообщению
Цитата:
1. Открываем опр. таблицу базы данных, считываем поле(напр. text) первой записи, заносим в переменную( пусть будет $articles1 ).
2. Убираем из текста в переменной $articles1 "мусор" : html теги, знаки препинания, символы, слова короче 3 букв и т.п.
3. Разбиваем полученный текст на слова и заносим в массив, затем записываем эти слова в индекс со счетчиком(для вывода результатов по релевантности).



Что за статья такая? В мускуле существую функции контекстного поиска по базе.

(Добавление)
Писал я у себя поиск на сайте.
В конце поставил форму поиска через яндекс..

SELECT id FROM base
WHERE MATCH(text) AGAINST('искомое слово');

Также существуют различные фции как RLIKE & REGEXP
mysql.ru
9. valenok - 21 Февраля, 2007 - 20:22:02 - перейти к сообщению

 

Powered by ExBB FM 1.0 RC1