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 » PHP » Программирование на PHP » Поиск по сайту

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

1. Vanu4 - 02 Июня, 2008 - 10:53:28 - перейти к сообщению
Хотел сделать нормальный поиск слов по всему сайту, начинал уже монго раз, но никак ничего нормального не получалось. Я придерживался такой идее (хотя я уже чувствую, что она не верная):
Сначала, я беру все файлы с директории сайта, заношу их в массив и выбираю только те, у кого разширение .html (страници сайта хтмливские). Потом делаю цикл и считываю всю инфу с каждой страницы в массив, причем каждый абзац в разный элемент массива. Потом, каждый абзац опять разбираю на слова, которые опять таки в массив. Потом разбиваю фразу поиска на слова и их сравниваю с словами, которые я получил с сайта.
Проблемы:
1. Очень и очень сложная структура (много вложеных циклов, разобраться в которых чужому человеку будет думаю не просто);
2. Попросили, чтоб я сделал ссылки на каждом найденом слове, которые будут приводить на страницу, на которой эта инфа находится, но это не получилось.
Короче хоче спросить, может кто-то знает какой-то механизм или подскажет структутру, как более просто можно решить задачу поиска.
2. D1mOn - 02 Июня, 2008 - 11:17:26 - перейти к сообщению
УЖОСНАХ! А сервер у Вас не упадет? Как думаете?
3. Джур - 02 Июня, 2008 - 11:31:33 - перейти к сообщению
D1mOn пишет:
УЖОСНАХ! А сервер у Вас не упадет? Как думаете?

Не упадет... РНР и не такое делать может, но на мой сугубо личный взгляд сложновато както... Хотя скриптов мы не видели Улыбка
я бы на месте данного комерада использовал хеширование... Учитывая что на сайтах используется не так уж и много слов, можно занести их в массив. ключ - это слово, а значение это список содержащих его страничек.
1. сайт хешируется время от времени
2. при поиске можно даже релевантность совпадения определить
3. ссылки на странички получить не проблемма
4. если сможете скриптом приводить все слова к именительному падежу, то и база станет меньше.

5. сложность кода увеличется... немного.
4. Vanu4 - 02 Июня, 2008 - 12:02:16 - перейти к сообщению
Джур пишет:
2. при поиске можно даже релевантность совпадения определить
Все более-менее понятно, только не знаю, что такое "релевантность совпадения". Обьясните пожалуйста.
(Добавление)
Джур пишет:
Не упадет... РНР и не такое делать может, но на мой сугубо личный взгляд сложновато както... Хотя скриптов мы не видели Улыбка
я бы на месте данного комерада использовал хеширование... Учитывая что на сайтах используется не так уж и много слов, можно занести их в массив. ключ - это слово, а значение это список содержащих его страничек.
1. сайт хешируется время от времени
2. при поиске можно даже релевантность совпадения определить
3. ссылки на странички получить не проблемма
4. если сможете скриптом приводить все слова к именительному падежу, то и база станет меньше.5. сложность кода увеличется... немного.
Если я все правильно понимаю, то мы берем все слова с сайта, заносим их в масив, удаляем те, что повторяются, а потом этим словам-ключам даем значения страниц, на которых они находятся. Так?
Тогда вопрос: может нужно хранитьномера страничек и абзацев, в которых имеется слово-поиск? Если нужно в вывести абзац со словом-поиск и его выделить каким либо цветом, нужно разбивать данный абзац и красить слово или все делается намного проще?
5. D1mOn - 02 Июня, 2008 - 12:18:20 - перейти к сообщению
Не совсем понятно, зачем юзерам необходимо искать во всем содержании страницы... Я понимаю если ищут, то например по статьям/видео/описаниям и т.п.
(Добавление)
Джур пишет:
Не упадет... РНР и не такое делать может

Я придерживаюсь мнения, что при заходе 100 челов, будет не до смеха )
6. Vanu4 - 02 Июня, 2008 - 12:20:41 - перейти к сообщению
D1mOn пишет:
Не совсем понятно, зачем юзерам необходимо искать во всем содержании страницы... Я понимаю если ищут, то например по статьям/видео/описаниям и т.п.
Ну это как раз и подразумевалось. Я не имею ввиду, что если человек ищет слово "Главная", то он попадет на главную страницу. Подразумевается инфа мужду тєгами <р></р>.
7. Джур - 02 Июня, 2008 - 12:22:50 - перейти к сообщению
релевантность совпадения - насколько точно страничка соответствует вашему запросу...

Цитата:

нужно хранитьномера страничек и абзацев, в которых имеется слово-поиск? Если нужно в вывести абзац со словом-поиск и его выделить каким либо цветом, нужно разбивать данный абзац и красить слово или все делается намного проще?

лучше не хранить... зная в каком файле надо копать, можно просто найти первое вхождение данного слова и вырезать кусок от -30 до +120 символов. а найденое слово подкрасить.
Либо найти слово и пренадлежащий ему абзац... только ведь абзац может быть БОЛЬШИМ.

поток в 100ч/сек весьма сомнительный... а если и будет, то время работы скрипта просто увеличется... при грамОтных настройках проДОСить такой скрипт будет нереально
8. D1mOn - 02 Июня, 2008 - 12:23:13 - перейти к сообщению
ИМХО, положить все данные по которым нужно искать в базу и не др***ть )
9. Джур - 02 Июня, 2008 - 12:28:29 - перейти к сообщению
D1mOn пишет:
ИМХО, положить все данные по которым нужно искать в базу и не др***ть )

а если базы нет?
да и хранить массив слов можно и в базе... никто не запрещает... скорость выборки только увеличется.
10. D1mOn - 02 Июня, 2008 - 12:30:22 - перейти к сообщению
Джур пишет:
а если базы нет?

Заведите Улыбка
(Добавление)
ИМХО, при такой разнице во времени добавления сообщений, нам нужно организовать чат )
11. Vanu4 - 02 Июня, 2008 - 12:37:19 - перейти к сообщению
Джур пишет:
лучше не хранить... зная в каком файле надо копать, можно просто найти первое вхождение данного слова и вырезать кусок от -30 до +120 символов. а найденое слово подкрасить.
Либо найти слово и пренадлежащий ему абзац... только ведь абзац может быть БОЛЬШИМ.


Но если на странице не один абзац со словом, как тогда?
12. valenok - 02 Июня, 2008 - 15:31:27 - перейти к сообщению
Вариант а - при помощи mysql
Все статические документы записывать в БД и использовать полнотекстовый поиск

Вариат б - при помощи гугл.
Вариант этот в 99% случаях эффективней.
13. Джур - 02 Июня, 2008 - 18:47:56 - перейти к сообщению
valenok пишет:

Вариат б - при помощи гугл.
Вариант этот в 99% случаях эффективней.

Неспорю... но мы обязаны ответить на вопрос человека Улыбка
Да и возможно есть какие-то ограничения, в связи с которыми юзать google нежелательно.

Цитата:
Но если на странице не один абзац со словом, как тогда?

Если обзацев много со схожими словами, то либо показывать первое вхождение, а дальше человек сам перейдет на нужную страничку.
либо отображать их все... что не есть гуд на мой взгляд
14. Vanu4 - 23 Июня, 2008 - 17:11:22 - перейти к сообщению
Решил вернутся к этой теме, есть пару новых вопросов.
Вот, например, было такое предложение взять все слова со страниц сайта и запихнуть их в базу. Но, как их правильно заносить, если, к примеру, слова "окно", "окна" ну и т.д. они же несут один смылс. Их так и заносить в базу как разные слова, или как?
И еще одно. Как сделать так, что если человек исчет, например слово "кружка", то ему поиск выводи еще страници со словами, например: "кружки", "кружек" ну и т.д.?
15. D1mOn - 24 Июня, 2008 - 01:55:32 - перейти к сообщению
Насчет "окно-окна", Вам предложили переводить в именительный падеж.

 

Powered by ExBB FM 1.0 RC1