StalkerClasses
Новичок
Кратко опишу как устроен сайт на CMS и немного в общем об идее.
Если рассматривать Wordpress, Modx - к примеру (другие CMS знаю только по скриншотам, а как они работают представления не имею) - то у них содержимое страницы (картинка, текст, таблица), содержится в записи самой страницы в одной колонке. Здесь реализовать хоть-какой нибудь поиск по сайту представляется возможным.
Мы просто ищем по страницам условно говоря
и другие различные условия на выключенность страницы. Проверить конечно родительскую цепочку, зздесь уже проблема...
Т.е. если у нас идет:
Главная > о компании > персонал > Саня Пупкин
Вот если страница о компании будет в состоянии Выкл) - то по идее и персонал и Саня Пупкин мы не должны показывать в результатах поиска, но проверить это очень сложно "быстро и качественно" на предмет кроме своего состояния доступности, так еще и родителя!...
+ В зависимости от типа страницы (новость, обычная страница, статья) - мы можем еще в результатах поиска по разному оформлять содержимое.
Теперь немного про то, в чем отличие той CMS - с которой работую...
У нее содержимое страницы собирается несколько иначе...
Записи страниц (page) и записи содержимого страниц (content) - это две разные таблицы! Содержимое страницы может быть различными типами:
- текст
- картинка
- вставка видео с youtube (со своими mysql-колонками и т.д.)
- фотография сотрудника
- плагин гостевая книга
- плагин еще какой-нибудь
Таких может быть бесчисленное кол-во различных комбинаций. И каждый имеет свой набор полей.
Т.е. если к примеру в "текст" - содержимое содержится в колонке textContent, то это совсем не означает , что текст к примеру в фотографии сотрудника будет содержаться в той же колонке, а не в какой нибудь другой (к примеру aboutPerson).
Из чего всего этого следует - что учесть эти различные комбинации колонок и попробовать как-то проискать на предмет принадлежащего содержимого странице - просто не реально! - составить такой MYSQL-запрос. Хотя бы еще потому, что плагин может к примеру дергать записи совершенно из другого места, а не с данной страницы.
Кроме того, при сборке страницы - могут происходить еще какие-нибудь различные процессы.
И в итоге мы получаем HTML-код страницы из данного набора "типов содержимого".
И теперь кратко об идее поиска.
1. Поиск основан на карте сайта (sitemap.xml) - сюда добавляем только те страницы, которые должны быть включены в результаты поиска
2. Каждая запись должна иметь постоянную ссылку на сайте (ее мы выдадим в результатах поиска).
3. Тип содержимого устанавливается специальным тэгом <typeContent>название типа содержимого (новость, статья, обычная страница, гостевая книга)</typeContent>
4. При практически каждом изменении придется очищать кэш sitemap.xml
5. По карте сайта запускаем бота - который ходит по ссылкам и смотрит - если изменилась актуальность даты изменения записи (допустим введем какой-нибудь тэг <dateActuale>10-10-2012)</dateActuale>) - от той, что он когда то проходил - то он заходит на данную страницу через file_get_contents , и получает содержимое страницы, между к примеру тэгами <contentSearch></contentSearch> - что бы забирать не всю страницу.
6. Если какую-то запись не хочется включать в результаты поиска то на карте сайта sitemap.xml - будте <excludeSearch>1</excludeSearch>
7. И так как к примеру может быть постраничная навигация (гостевая книга) - то нужно как-то придумать как применить показать боту, что гостевая книга обновилась, пересканируй все ссылки заново, и пока не пересканируешь, ее в результаты поиска не выдавай, или выдавай, то, что уже пересканиваровал.
8. Что бы страница индексировалась быстрее (file_get_contents) - можно ввести один специальный параметр &forSearchContenIndexing = 1 - и будет показвыться упрощенный вариант страницы сайта (без header, footer).
В итоге имеем:
Из всего этого только два вопросика:
1. насколько это реально (хотя бы для сайтов - 1000 - 2000 страниц в sitemap.xml)
2. как правильно сделать подобного простого спайдера (возможно придется с Cron)?
--
От себя добавлю - что это идея именно общего поиска по сайту с разбивкой на типы содержимого...
Конечно если нужно организовать поиск по базе новостей - 50 - 10 000 записей и больше - то лучше создать его и использовать два поиска - где будет выпадающий список:
- Искать по сайту (до тысячи страниц - на основе sitemap.xml).
- Искать в новостях (сколько угодно записей).
Если рассматривать Wordpress, Modx - к примеру (другие CMS знаю только по скриншотам, а как они работают представления не имею) - то у них содержимое страницы (картинка, текст, таблица), содержится в записи самой страницы в одной колонке. Здесь реализовать хоть-какой нибудь поиск по сайту представляется возможным.
Мы просто ищем по страницам условно говоря
Код:
SELECT * FROM tablePage WHERE LIKE content '%поисковая фраза%' WHERE del = 0 AND hide = 0
Т.е. если у нас идет:
Главная > о компании > персонал > Саня Пупкин
Вот если страница о компании будет в состоянии Выкл) - то по идее и персонал и Саня Пупкин мы не должны показывать в результатах поиска, но проверить это очень сложно "быстро и качественно" на предмет кроме своего состояния доступности, так еще и родителя!...
+ В зависимости от типа страницы (новость, обычная страница, статья) - мы можем еще в результатах поиска по разному оформлять содержимое.
Теперь немного про то, в чем отличие той CMS - с которой работую...
У нее содержимое страницы собирается несколько иначе...
Записи страниц (page) и записи содержимого страниц (content) - это две разные таблицы! Содержимое страницы может быть различными типами:
- текст
- картинка
- вставка видео с youtube (со своими mysql-колонками и т.д.)
- фотография сотрудника
- плагин гостевая книга
- плагин еще какой-нибудь
Таких может быть бесчисленное кол-во различных комбинаций. И каждый имеет свой набор полей.
Т.е. если к примеру в "текст" - содержимое содержится в колонке textContent, то это совсем не означает , что текст к примеру в фотографии сотрудника будет содержаться в той же колонке, а не в какой нибудь другой (к примеру aboutPerson).
Из чего всего этого следует - что учесть эти различные комбинации колонок и попробовать как-то проискать на предмет принадлежащего содержимого странице - просто не реально! - составить такой MYSQL-запрос. Хотя бы еще потому, что плагин может к примеру дергать записи совершенно из другого места, а не с данной страницы.
Кроме того, при сборке страницы - могут происходить еще какие-нибудь различные процессы.
И в итоге мы получаем HTML-код страницы из данного набора "типов содержимого".
И теперь кратко об идее поиска.
1. Поиск основан на карте сайта (sitemap.xml) - сюда добавляем только те страницы, которые должны быть включены в результаты поиска
2. Каждая запись должна иметь постоянную ссылку на сайте (ее мы выдадим в результатах поиска).
3. Тип содержимого устанавливается специальным тэгом <typeContent>название типа содержимого (новость, статья, обычная страница, гостевая книга)</typeContent>
4. При практически каждом изменении придется очищать кэш sitemap.xml
5. По карте сайта запускаем бота - который ходит по ссылкам и смотрит - если изменилась актуальность даты изменения записи (допустим введем какой-нибудь тэг <dateActuale>10-10-2012)</dateActuale>) - от той, что он когда то проходил - то он заходит на данную страницу через file_get_contents , и получает содержимое страницы, между к примеру тэгами <contentSearch></contentSearch> - что бы забирать не всю страницу.
6. Если какую-то запись не хочется включать в результаты поиска то на карте сайта sitemap.xml - будте <excludeSearch>1</excludeSearch>
7. И так как к примеру может быть постраничная навигация (гостевая книга) - то нужно как-то придумать как применить показать боту, что гостевая книга обновилась, пересканируй все ссылки заново, и пока не пересканируешь, ее в результаты поиска не выдавай, или выдавай, то, что уже пересканиваровал.
8. Что бы страница индексировалась быстрее (file_get_contents) - можно ввести один специальный параметр &forSearchContenIndexing = 1 - и будет показвыться упрощенный вариант страницы сайта (без header, footer).
В итоге имеем:
PHP:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://example.com/</loc>
<lastmod>2013-09-06</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
// Специальные тэги для поискового робота
<dateActuale>10-10-2014</dateActuale>
<typeContent>News</typeContent>
<excludeSearch>1</excludeSearch>
</url>
</urlset>
1. насколько это реально (хотя бы для сайтов - 1000 - 2000 страниц в sitemap.xml)
2. как правильно сделать подобного простого спайдера (возможно придется с Cron)?
--
От себя добавлю - что это идея именно общего поиска по сайту с разбивкой на типы содержимого...
Конечно если нужно организовать поиск по базе новостей - 50 - 10 000 записей и больше - то лучше создать его и использовать два поиска - где будет выпадающий список:
- Искать по сайту (до тысячи страниц - на основе sitemap.xml).
- Искать в новостях (сколько угодно записей).

Последнее редактирование: