Поиск по сайту (таблица MySQL)

StalkerClasses

Новичок
Это из-за четырех букв?
Если у меня вводится меньше четырех букв - то LIKE.
Если как положено для четырех букв - то мне было бы интересно попробовать полнотекстовый поиск с релевантностью, что бы разобраться как это работает.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Данные переданные через POST.

Full - текст запросы пока очень сложно реализовать.
Я еще раз спрашиваю, что это за г? Данные переданные через POST доступны в соответствующем массиве.

Ты EXPLAIN запроса с LIKE '%%' смотрел?
 

StalkerClasses

Новичок
Я еще раз спрашиваю, что это за г? Данные переданные через POST доступны в соответствующем массиве.

Ты EXPLAIN запроса с LIKE '%%' смотрел?

Г - это главная (только первая буква)
Что за Explain?
Пишу $GLOBALS['_POST'] а не $_POST - т.к. использую переменную в классе.

// Если в поиск введена одна буква будет LIKE 'г%'
// Если в поиск введено больше одной буквы будет LIKE '%гл...%;
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
StalkerClasses, я не про главную спрашивал, а про говнокод, что ты написал. Нет никакой разницы где ты используешь переменную из $_POST, она везде доступна. Если не хочешь брать данные в классе прямо из $_POST - передай этот массив или его часть как аргумент метода класса.

EXPLAIN позволяет увидеть в mysql как выполняется твой запрос. И если ты все таки пойдешь в мануал и прочитав его запустишь запрос с EXPLAIN в самом начале, ты увидишь страшное.

Для твоего первого запроса нужна колонка отражающая сожержание колонки по которой ты ищешь, только чтобы в ней была одна буква и индекс - как вариант. Однако же для второго запроса с '%%' ничего не поможет, у тебя ВСЕГДА будут перебираться все строки в таблице. Это плохо.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
StalkerClasses, на этот вопрос ты и должен ответить прочитав мануал и четко представляя, что ты пишешь. Я пока вижу у тебя только попытки как-то реализовать некую идею без четкой концепции.

И тут не "как правильно составить запрос", а как правильно решить задачу. Запросом тут не ограничишься.
 

StalkerClasses

Новичок
У меня есть бот, который ходит по сайту. Он обходит сайт и пишет в таблицу следующие данные:
- date_create
- date_update
- page_domain
- page_id

- page_title
- page_meta_keywords
- page_meta_description
- page_content

- page_url
- page_url_md5

Все данные уже собраны.
Вопрос только в том, как лучше сделать простой поиск по сайту на основе этих данных.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
StalkerClasses, ты для себя написал поискового робота, чтобы он обходил свой сайт и пытаешься на основании его данных сделать поиск по своему же сайту?
 

StalkerClasses

Новичок
StalkerClasses, ты для себя написал поискового робота, чтобы он обходил свой сайт и пытаешься на основании его данных сделать поиск по своему же сайту?
Да, робот спайдер уже готов. Данные он умеет собирать, работает по cron.
Вопрос в том, как лучше сделать поиск в той таблице в которую он пишет данные с точки зрения MySQL.

Таблица состоит из вот этих данных:
- date_create
- date_update
- page_domain
- page_id

- page_title
- page_meta_keywords
- page_meta_description
- page_content

- page_url
- page_url_md5
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
StalkerClasses, я даже не знаю как тебе сказать о том, что ты все сделал не так, как надо.
Поиск так - не делает никто, только ты. Вся твоя задача сводилась к тому, чтобы в изначальных данных, (без всякого мусора в виде html, которые дает тебе твой робот) которые у тебя лежат в mysql, найти нужные. Здесь бы подошел и sphinx и полнотекстовый поиск из mysql, даже чертов LIKE кое как бы справился.

Мой совет - пока не поздно отказаться от глупой затеи и начать писать все нормально.
 

StalkerClasses

Новичок
StalkerClasses, я даже не знаю как тебе сказать о том, что ты все сделал не так, как надо.
Поиск так - не делает никто, только ты. Вся твоя задача сводилась к тому, чтобы в изначальных данных, (без всякого мусора в виде html, которые дает тебе твой робот) которые у тебя лежат в mysql, найти нужные. Здесь бы подошел и sphinx и полнотекстовый поиск из mysql, даже чертов LIKE кое как бы справился.

Мой совет - пока не поздно отказаться от глупой затеи и начать писать все нормально.
Не совсем пойму что делаю не правильно - робот готов и ходит по ссылкам. Пишет контент-данные о странице (заголовок, meta-описания, содержимое).
Что не правильно-то?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
StalkerClasses, зачем ты тогда писал робота? Можно же было сразу написать поиск с использованием mysql.
 

StalkerClasses

Новичок
StalkerClasses, зачем ты тогда писал робота? Можно же было сразу написать поиск с использованием mysql.
Проблема в том, что у меня нет одной таблицы page - где сразу есть и заголовок, и содержимое страницы.
У одной страницы - содержимое может быть на PHP - где к примеру есть БД сотрудников и она берет данные совершенно из другой таблицы (это еще хорошо если это не другое подключение к БД):) со своей логикой. На другой странице есть гостевая книга, на другой есть новости и т.д.

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

Обходчик - работает, собирает, исключает и т.д. - в общем обновляет актуальность данных в таблице постоянно - пишет все в одну таблицу.
 

StalkerClasses

Новичок
StalkerClasses, зачем ты тогда писал робота? Можно же было сразу написать поиск с использованием mysql.
Отказался от идеи робота и решил сделать как советуете.

Теперь структура сайта представлет из себя таблицу:

- id
- title
- keywords
- description
- content
- page_parent_id

Как правильно сделать поиск?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
StalkerClasses, ты можешь искать средствами MATCH или LIKE по самой таблице, по полям title/keywords/description/content. Когда найдешь соответствия - выводишь ссылку на страницу, где нашел искомое слово.

Сделай с LIKE, протестируй, потом будешь думать о более феншуйных методах
 

StalkerClasses

Новичок
Код:
Хороший и логичный поиск получается:

SELECT * FROM content_indexing
    WHERE
            page_title LIKE '%контакты%' OR
            page_meta_keywords LIKE '%контакты%' OR
            page_meta_description LIKE '%контакты%'
  
    LIMIT 7 ;
Но вот если добавить -
OR page_content LIKE '%контакты%'

То это уже "плохо".
 
Сверху