Идея поиска по сайту - она жизнеспособна?

StalkerClasses

Новичок
Кратко опишу как устроен сайт на CMS и немного в общем об идее.

Если рассматривать 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).
- Искать в новостях (сколько угодно записей). :)
 
Последнее редактирование:

hell0w0rd

Продвинутый новичок
по фото/картинке/видео ты не поищешь. ты можешь искать только по текстовым данным - вычленять из видео описание для него, теги и так далее. По этим данным и ищи. А вообще познакомься со sphinx или яндекс-поиском для сайта.
 

StalkerClasses

Новичок
по фото/картинке/видео ты не поищешь. ты можешь искать только по текстовым данным - вычленять из видео описание для него, теги и так далее. По этим данным и ищи. А вообще познакомься со sphinx или яндекс-поиском для сайта.
Яндекс мне к сожалению не подходит.


Так понимаю, что полнотекстовый поиск это из - этой серии:
http://ru.wikipedia.org/wiki/Apache_Solr
http://ru.wikipedia.org/wiki/Sphinx_(поисковая_система)
  • Высокая масштабируемость (крупнейший известный кластер индексирует до 3 000 000 000 документов и поддерживает более 50 миллионов запросов в день);
А как оно это работает - т.е. это также как включить поддержку memcache - на сервере?
 

StalkerClasses

Новичок
Не совсем пойму, а можно в кратце про алгоритм sphinx
Что он делает - он по сайту ходит или по БД?
 

hell0w0rd

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

Тугай

Новичок
Низнаю даже как написать :)
Короче не освоив арифметику тс пытается заниматься интегралами.

Советую разобраться как все таки работает sphinx, не обязательно его применять но все что можно изобрести это его упощенный, урезанный частный случай.

Фразы типа "индексирует бд" - это о чем вообще речь ? :)
Разберись, что на самом деле индексируется и для чего и вопросы разрешатся.

То что ты предлагаешь - это тоже своего рода индекс, но он никуда не годится.
Задумайся просто как ты его будешь в таком виде как ты описал формировать и тебе придется снова решать все теже проблемы из-за которых ты создал топик.
 
Последнее редактирование:

riff

Новичок
Если это на минутку не учитывать, остальное получилось запустить?
Или это был вопрос не ко мне?

А на счёт двух символов, это где-то у меня в коде отсеивается. Сейчас взгляну.
 
Сверху