Такс. Из всего выше изложенного, прихожу к выводу, что FULLTEXT отправляется в печку... Собственно, что же остается? Использовать нечто подобное механизму изложенному уважаемым Зодчим? И вообще, реален ли в таком случае адекватный поиск в MySQL?
ЗодчийТеней: ...попробуйте что-то вроде
$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 ('запрос') уже выдает мне некое число, оценивающее релевантность. Я просто складываю релевантность всех индексных полей, вычисляя общюю. И ничего не тормозит. Так, что... ладно, всем спасибо огромное, буду дальше разбираться...
Scaramush: Tarry И крайнее... результат выборки в in boolean mode может не совпадать с выборкой для определения релевантности... в этом случае, мускуль просто не выдаст те строки, которые не смог отсортировать. Попробуйте потестить... посмотрите выдачу по запросу без "in boolean mode" и выдачу по тому же запросу в режиме "in boolean mode"...
Вот это уже ближе к истине, ибо так оно и есть. Но boolean mode нужен для модификации словосочитаний по +*- итд. Так что без него не куда...
А релевантность boolean mode как раз выдается либо 0 либо 1. Так что приходится комбинировать эти два типа. Засада, короче.
akkn: Я согласен, что сайт с ошибками - несолидно. Появилась смешная идея: сайты, оптимизированные под ошибки считать дорвеем, а заточенные под ошибки ссылки - разновидностью клоакинга =)
Ага, людей которые говорят звОнит, вместо звонит высылать за 101-ый редирект :)
ЗодчийТеней: выборку и сортировку ты делаешь sql запросом (средствами mysql fulltext, match against in boolean mode) и при этом утверждаешь что ошибка не в нем? приведи пример своего запроса, рабочий пример, и тогда будет что обсудить, покачьто постановка вопроса идет на уровне "у меня ошибка, помогите". Так тебе наврядли что-то объяснят, да и думаю что вопросы по мьускулю не типичны для данного форума.
1
Прочитайте внимательней вопрос. Если вамнечего ответить, не пишите.
Суть проблемы НЕ В ЗАПРОСЕ. А в механизме расчета релевантности в MySQL FULL TEXT.
Пример рабочего запроса, специально для Вас:
$sql ="
SELECT *, MATCH SCONT AGAINST('$stxt')/$devider1
+
MATCH STITLE AGAINST('$stxt*')/$devider2
+
MATCH META_KEYS AGAINST('$stxt*')/$devider3
+
MATCH META_DESC AGAINST('$stxt*')/$devider4
AS Rel
FROM `INDEX_BASE`
WHERE MATCH SCONT AGAINST('$stxt' IN BOOLEAN MODE)
AND
MATCH STITLE AGAINST('$stxt' IN BOOLEAN MODE)
AND
MATCH META_KEYS AGAINST('$stxt' IN BOOLEAN MODE)
AND
MATCH META_DESC AGAINST('$stxt' IN BOOLEAN MODE)
ORDER BY Rel DESC
Красиво, спасибо.
Мое IMHO:
Это когда ищут например "инфраструктуры сбора и утилизации макулатуры"
Ну или "магазин веб-дизанов" :)
Конкретные цифры тут не причем. Ибо из названия термина и так все ясно. Запрос, редко задаваемый ПС, по отношению к другим.
А вообще вопрос странный, из серии "Что для вас протокол HTTP? Каков он?"
Вам сюда 😂 :d 😆
Принимаю всех кроме:
-не порнуха
-прямая ответная ссылочка в любом из представленных видов
- не "галимый" сайт
Это как понимать то? То есть принимается только порнуха и галимые сайты?
😂
Такс. Из всего выше изложенного, прихожу к выводу, что FULLTEXT отправляется в печку... Собственно, что же остается? Использовать нечто подобное механизму изложенному уважаемым Зодчим? И вообще, реален ли в таком случае адекватный поиск в MySQL?
...попробуйте что-то вроде
$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. Так что приходится комбинировать эти два типа. Засада, короче.
Вы не угадали иронию в моих словах. ...
А Вы в моих! :)
Я согласен, что сайт с ошибками - несолидно. Появилась смешная идея: сайты, оптимизированные под ошибки считать дорвеем, а заточенные под ошибки ссылки - разновидностью клоакинга =)
Ага, людей которые говорят звОнит, вместо звонит высылать за 101-ый редирект :)
выборку и сортировку ты делаешь sql запросом (средствами mysql fulltext, match against in boolean mode) и при этом утверждаешь что ошибка не в нем? приведи пример своего запроса, рабочий пример, и тогда будет что обсудить, покачьто постановка вопроса идет на уровне "у меня ошибка, помогите". Так тебе наврядли что-то объяснят, да и думаю что вопросы по мьускулю не типичны для данного форума.
1
Прочитайте внимательней вопрос. Если вамнечего ответить, не пишите.
Суть проблемы НЕ В ЗАПРОСЕ. А в механизме расчета релевантности в MySQL FULL TEXT.
Пример рабочего запроса, специально для Вас:
Tarry, Тестить не тестила, но, может, вам не хватает морфологического анализа? Словоформы учитываются?
Безусловно, его не хватает. Это,так сказать, вторая часть марлизонского балета. Беспокоит отсутствие в выдаче документов, явно содержащих слово.