- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
В 2023 году Google заблокировал более 170 млн фальшивых отзывов на Картах
Это на 45% больше, чем в 2022 году
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Tarry, Ну так, может, у вас это слово встречается, но в другой форме, и потому не находится?
выборку и сортировку ты делаешь sql запросом (средствами mysql fulltext, match against in boolean mode) и при этом утверждаешь что ошибка не в нем? приведи пример своего запроса, рабочий пример, и тогда будет что обсудить, покачьто постановка вопроса идет на уровне "у меня ошибка, помогите". Так тебе наврядли что-то объяснят, да и думаю что вопросы по мьускулю не типичны для данного форума.
1
Прочитайте внимательней вопрос. Если вамнечего ответить, не пишите.
Суть проблемы НЕ В ЗАПРОСЕ. А в механизме расчета релевантности в MySQL FULL TEXT.
Пример рабочего запроса, специально для Вас:
А в механизме расчета релевантности в MySQL FULL TEXT.
если Вы не относите эту часть к запросу, думаю что Вы сами не совсем понимаете свою же проблему. Со совей стороны могу посоветовать лишь одно, избавьтесь в запросе от множества MATCH, сильно тормозит и введите весовые коэффициенты, попробуйте что-то вроде
$query = "SELECT `search`.*, "
." IF (search like '%".$text."%', 3*10, 0) "
." + IF (search LIKE '%".str_replace(" ", "%', 9, 0) + IF (search LIKE '%", $text)."%', 9, 0) AS relev"
." FROM `search` "
." WHERE (`search`.`search` LIKE '%".str_replace(" ", "%' OR `search`.`search` LIKE '%", $text)."%') "
." ORDER BY relev DESC";
Где соответственно $text это Ваш поисковый массив. $n количество поисковых слов. Выборку по нескольким полям довьте сами.
Tarry, а с какой кодировкой мускуль собран? Какой тип таблиц?Что в error_log?
Кстати, Вам ЗодчийТеней правильно написал... запрос криво составлен. Кроме того, я бы рекомендовал весь текст всех нужных полей слить в отдельную таблицу и добавить индексное поле. Запрос получится короче и работать будет гораздо быстрее.
И крайнее... результат выборки в in boolean mode может не совпадать с выборкой для определения релевантности... в этом случае, мускуль просто не выдаст те строки, которые не смог отсортировать. Попробуйте потестить... посмотрите выдачу по запросу без "in boolean mode" и выдачу по тому же запросу в режиме "in boolean mode"...
...попробуйте что-то вроде
$query = "SELECT `search`.*, "
." IF (search like '%".$text."%', 3*10, 0) "
." + IF (search LIKE '%".str_replace(" ", "%', 9, 0) + IF (search LIKE '%", $text)."%', 9, 0) AS relev"
." FROM `search` "
." WHERE (`search`.`search` LIKE '%".str_replace(" ", "%' OR `search`.`search` LIKE '%", $text)."%') "
." ORDER BY relev DESC";
..
Это все очень хорошо, но причем тут FULLTEXT? Зачем городить кучу LIKE если есть готовый механизм поиска по FULLTEXT INDEX?
MATCH `поле` AGAINST ('запрос') уже выдает мне некое число, оценивающее релевантность. Я просто складываю релевантность всех индексных полей, вычисляя общюю. И ничего не тормозит. Так, что... ладно, всем спасибо огромное, буду дальше разбираться...
Tarry
И крайнее... результат выборки в in boolean mode может не совпадать с выборкой для определения релевантности... в этом случае, мускуль просто не выдаст те строки, которые не смог отсортировать. Попробуйте потестить... посмотрите выдачу по запросу без "in boolean mode" и выдачу по тому же запросу в режиме "in boolean mode"...
Вот это уже ближе к истине, ибо так оно и есть. Но boolean mode нужен для модификации словосочитаний по +*- итд. Так что без него не куда...
А релевантность boolean mode как раз выдается либо 0 либо 1. Так что приходится комбинировать эти два типа. Засада, короче.
Это все очень хорошо, но причем тут FULLTEXT? Зачем городить кучу LIKE если есть готовый механизм поиска по FULLTEXT INDEX?
MATCH `поле` AGAINST ('запрос') уже выдает мне некое число, Вот это уже ближе к истине, ибо так оно и есть. Но boolean mode нужен для модификации словосочитаний по +*- итд. Так что без него не куда...
А релевантность boolean mode как раз выдается либо 0 либо 1. Так что приходится комбинировать эти два типа. Засада, короче.
http://dev.mysql.com/doc/refman/4.0/ru/reference.html Вам поможет, разберитесь для начала с языком запросов, что и как работает, тогда Вы поймете что именно Вам выдает MATCH, что такое "релевантность boolean mode" и почему куча LIKE лучше кучи MATCH`а. Удачи.
Умеющий уши да услышит!
Засада, короче
Я бы отказался от релевантности мускуля и дал возможность пользователям делать уточняющие запросы и использовать все символы для инбулинмод... Но это ИМХО.
Tarry, Мускуль снабжен собственным механизмом определения релевантности. Она для поиска не подходит - проходили полгода назад на своей шкуре.
Такс. Из всего выше изложенного, прихожу к выводу, что FULLTEXT отправляется в печку... Собственно, что же остается? Использовать нечто подобное механизму изложенному уважаемым Зодчим? И вообще, реален ли в таком случае адекватный поиск в MySQL?
Смотря какой у вас объем инфы, и как вы собираетесь хранить индекс.