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

StalkerClasses

Новичок
Добрый день.

Думал, что будут неизвестности в написания алгоритма обходчика сайта , но как оказалось, " неизвестность" появилась в том, а как искать в этой таблице и как сортировать результаты выдачи?

В момент оходки и в итоге сайта в таблицу записываются следующие данные по странице:

- date_create
- date_update
- page_domain
- page_id

- page_title
- page_meta_keywords
- page_meta_description
- page_content

- page_url
- page_url_md5

Пока сделал без сортировки результатов и ищет только по заголовкам (page_title) - page_title LIKE '%поисковый запрос%'
 

StalkerClasses

Новичок
полнотекстовый поиск
В нем получается - что если человек введет слово главная к примеру - то не факт что в результатах поисках главная страница будет первой - или что то не правильно понимаю?

Может вот эти четыре колонки объединить в одну? page_title - page_meta_keywords - page_meta_description - page_content?

И полнотекстовый поиск только от четырех букв?
Хотелось бы что бы и две буквы искал - т.к. есть аппараты которые называются из двух букв.
 

StalkerClasses

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

StalkerClasses

Новичок
Наверное подобных вопросов было уже много - но везде одно тоже вроде:
$request = $db->query("SELECT `description`, `name` FROM `prefix_name` WHERE `description` LIKE '%". $db->real_escape_string($query) . "%' OR `name` LIKE '%". $db->real_escape_string($query) . "%' LIMIT 0, 10");

Может есть какие-то нюансы...
Поделитесь пожалуйста - как лучше сделать.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Может все таки Sphinx?
 

С.

Продвинутый новичок
А ты как хотел? Хочешь легко и просто, результат будет поверхностный. Хочешь основательно -- надо будет напрячься.
 

StalkerClasses

Новичок
$qSearch = $GLOBALS['_POST']['searchword'];
$qSearch = (mb_strlen($qSearch, 'UTF-8') <= 1) ? $qSearch . "%" : "%" . $qSearch . "%";
$qSearch = str_replace (' ','%', $qSearch);

Код:
 SELECT  *  FROM  roboindexing
    WHERE 
    page_title LIKE '%'
    OR page_meta_keywords LIKE '%'
    OR page_meta_description LIKE '%'
    LIMIT 7    ;
Пока вот такого хватит )

Фишка том, что когда пользователь вводит 1 букву - ищется только с первой буквы, а когда уже больше одной буквы, ищется в любой части строки.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
PHP:
 $GLOBALS['_POST']['searchword'];
Это что вообще за хрень?

LIKE к полнотекстовому поиску НИКАКОГО отношения не имеет. И делать фуллскан таблицы уже давно не модно
 

StalkerClasses

Новичок
PHP:
$GLOBALS['_POST']['searchword'];
Это что вообще за хрень?

LIKE к полнотекстовому поиску НИКАКОГО отношения не имеет. И делать фуллскан таблицы уже давно не модно
Данные переданные через POST.

Full - текст запросы пока очень сложно реализовать.
 

StalkerClasses

Новичок
Человек начинает искать одну букву "Г" - ему выдается "главная" (поиск идет "Символ%)
Начинает искать от двух букв - (поиск идет "%слово%")
 

StalkerClasses

Новичок
Вот с чем столкнулся.
Как-то надо актуализировать список URL-адресов (одни URL-становяться 404-страницей, другие выключаются, или пропадают по другим причинам.

Перед обходом робота - всем существующим страницам (ранее проиндексированному контенту) - ставиться флаг удалить из индекса = 1
Попадая на страницу - там устанавливается флаг удалить из индекса = 0
В конце обхода роботом - из индекса уничтожается все, у кого установлен флаг = 1.

Так получаются всегда актуальные данные в базе.

Но вот проблема в том, что если одна из страниц сломалась, то соответственно запращивая file_get_contents - робот не получит с нее ссылок. И не попадет на страницы где будет проставлен удалить из индекса = 0.

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

Как можно обыграть актуализацию URL-адресов по другому?
 

AnrDaemon

Продвинутый новичок
Данные переданные через POST.
Знаешь, когда тебе задают вопрос "что это за фигню ты написал", надо не давать ответ, достойный Капитана Очевидность, а открыть инструкцию и прочитать то, что ты забыл/проигнорировал/не понял при последнем прочтении.
 
Последнее редактирование модератором:

StalkerClasses

Новичок
Подскажите пожалуйста, как правильно составить запрос на полнотекстовый поиск и как правильно создать таблицу для полнотекстового поиска из четырех колонок:

- заголовок страницы
- ключевые слова
- описание
- содержимое

в противовес LIKE
 

StalkerClasses

Новичок
Что лучше использовать
Это
PHP:
 CREATE TABLE table
(
field1 VARCHAR (255),
field2 TEXT,
FULLTEXT (field1, field2)
)

или

CREATE TABLE table
(
field1 VARCHAR (255),
field2 TEXT,
FULLTEXT (field1),
FULLTEXT (field2)
)
И нужно ли считать релевантность или можно без нее?
 

WMix

герр M:)ller
Партнер клуба
как лучше создавать индекс зависит от того как ты будешь искать.
напиши select пойска
 

StalkerClasses

Новичок
PHP:
// Если в поиск введена одна буква
SELECT * FROM content_indexing 
	WHERE
			page_title LIKE 'к%' OR 
			page_meta_keywords LIKE 'к%' OR 
			page_meta_description LIKE 'к%' OR
			page_content LIKE 'к%' OR			
	
	LIMIT 7 ;
	
// Если в поиск введено две и больше букв
SELECT * FROM content_indexing 
	WHERE
			page_title LIKE '%контакты%' OR 
			page_meta_keywords LIKE '%контакты%' OR 
			page_meta_description LIKE '%контакты%' OR
			page_content LIKE '%контакты%' OR			
	
	LIMIT 7 ;
 
Сверху