Внимание! Форум временно закрыт. Все вопросы вы можете задать на странице MaxSite CMS в Github

Свой поисковый алгоритм: как оптимальнее?

Только для тех, кто понимает.
Аватар пользователя
nicothin
Модератор
Сообщений: 521
Зарегистрирован: 09 мар 2009, 21:55

Re: Свой поисковый алгоритм: как оптимальнее?

Сообщение nicothin » 26 дек 2013, 12:11

http://jsfiddle.net/popsul/sXZTD/1/ — JS-реализация

Аватар пользователя
nicothin
Модератор
Сообщений: 521
Зарегистрирован: 09 мар 2009, 21:55

Re: Свой поисковый алгоритм: как оптимальнее?

Сообщение nicothin » 29 дек 2013, 03:28

По ходу возник вопрос:

Код: Выбрать все

$CI->db->where('(`page_content` LIKE \'' . $CI->db->escape_str($word) . '%\')', '', false);
— такая конструкция ищет совпадение только в начальной части слов
Происходит ли при этом поиск в словах, с которых начинается текст?

Аватар пользователя
MAX
Администратор
Сообщений: 3179
Зарегистрирован: 31 янв 2009, 19:02

Re: Свой поисковый алгоритм: как оптимальнее?

Сообщение MAX » 29 дек 2013, 09:54

Не совсем. Для того, чтобы поиск был по началу шаблона, нужно ограничивать условие LITE с двух сторон. Например:

Код: Выбрать все

«СЛОВО% »


— обратите внимание на пробел. То есть % используется как группа произвольных символов. Если не ограничить справа, то я даже не знаю, теоретически sql найдет текст до конца записи.

Вот нагулил интересные примеры: http://www.flenov.info/books.php?contentid=21

Аватар пользователя
nicothin
Модератор
Сообщений: 521
Зарегистрирован: 09 мар 2009, 21:55

Re: Свой поисковый алгоритм: как оптимальнее?

Сообщение nicothin » 29 дек 2013, 14:16

проблемка...

Код: Выбрать все

$CI = & get_instance();
// это запрос для типа SERCH
$CI->db->select('page.page_id');
$CI->db->from('page');
// like делаем свой
$CI->db->where('(`page_content` LIKE \'' . $CI->db->escape_str($word) . '%\')', '', false);
$CI->db->where('page_status', 'publish');
$CI->db->where('page_type_name', 'blog');
$CI->db->join('page_type', 'page_type.page_type_id = page.page_type_id', 'left');
$CI->db->order_by('page_id', 'asc');
//$CI->db->group_by('page.page_id');
// /это запрос для типа SERCH
// нужно добавить SQL_BUFFER_RESULT
$query_sql = str_replace('SELECT ', 'SELECT SQL_BUFFER_RESULT ', $CI->db->_compile_select());
$query = $CI->db->query($query_sql);
$CI->db->_reset_select();

$word = тем
примеры текстов записей в БД:
1. «Платные темы оформления ...»
2. «... Некоторые из тем содержат ...»

найдено: нифига не найдено, нуль результатов.

если же для LIKE , таки, поставить в начале «%», то есть использовать

Код: Выбрать все

$CI->db->where('(`page_content` LIKE \'%' . $CI->db->escape_str($word) . '%\')', '', false);
то «находит» (не в начале слов, а в любом месте, понятное дело)

ЧТО за мистика???
что я делаю не так, почему

Код: Выбрать все

LIKE \'' . $CI->db->escape_str($word) . '%\'
не работает?

Аватар пользователя
MAX
Администратор
Сообщений: 3179
Зарегистрирован: 31 янв 2009, 19:02

Re: Свой поисковый алгоритм: как оптимальнее?

Сообщение MAX » 29 дек 2013, 16:39

LIKE 'слово%'

— поиск фразы начинающееся со «слово» в начале текста. Поэтому для поиска вхождения внутри текста используется

LIKE '%слово%'

Аватар пользователя
nicothin
Модератор
Сообщений: 521
Зарегистрирован: 09 мар 2009, 21:55

Re: Свой поисковый алгоритм: как оптимальнее?

Сообщение nicothin » 29 дек 2013, 16:46

то-то и оно.
LIKE \'' . $CI->db->escape_str($word) . '%\' — должно же работать...

Аватар пользователя
MAX
Администратор
Сообщений: 3179
Зарегистрирован: 31 янв 2009, 19:02

Re: Свой поисковый алгоритм: как оптимальнее?

Сообщение MAX » 29 дек 2013, 17:22

Будет искать только где «тем» в начале текста.

Аватар пользователя
nicothin
Модератор
Сообщений: 521
Зарегистрирован: 09 мар 2009, 21:55

Re: Свой поисковый алгоритм: как оптимальнее?

Сообщение nicothin » 29 дек 2013, 19:31

LIKE \' ' . $CI->db->escape_str($word) . '%\'
и
LIKE \'_' . $CI->db->escape_str($word) . '%\'
тоже не ищут «только в начале слов».

придется что-то придумать...

Аватар пользователя
MAX
Администратор
Сообщений: 3179
Зарегистрирован: 31 янв 2009, 19:02

Re: Свой поисковый алгоритм: как оптимальнее?

Сообщение MAX » 29 дек 2013, 20:05

Так чего гадать — проверяйте запросы в phpMyAdmin. Ситуации разные бывают. Может в тексте первый символ — html-тег или перенос строки.

Аватар пользователя
nicothin
Модератор
Сообщений: 521
Зарегистрирован: 09 мар 2009, 21:55

Re: Свой поисковый алгоритм: как оптимальнее?

Сообщение nicothin » 29 дек 2013, 20:37

думаю, разумнее поступить чуть иначе:
применительно к поиску в заголовках — делаю выборку по %слово%, но получаю не только ID страниц, но и тексты заголовков, которые и проверяю регуляркой.
причина: штатными средствами не сделать LIKE-выборку по началу слов (только по началу данных).


Вернуться в «if (!is_type('Programmer')) die('not for you');»

Кто сейчас на форуме

Пользователь просматривает форум: нет зарегистрированных пользователей

cron