Сортировка по релевантности и по дате одновременно

idencial

Одинаковый
Сортировка по релевантности и по дате одновременно

Вот заказчик сказал
результаты поиска должны сортироваться по релевантности, а потом по
Так вообще можно, т.е например если взять пример из php в деталях
PHP:
SELECT *, MATCH field1 AGAINST ('$searchwords')+MATCH field2 AGAINST ('$searchwords') as relev FROM table ORDER BY relev DESC
Если я у этого запроса для order вставлю еще и дату. т.е
PHP:
SELECT *, MATCH field1 AGAINST ('$searchwords')+MATCH field2 AGAINST ('$searchwords') as relev FROM table ORDER BY relev, datetime DESC
Будет ли это пахать как надо или с релевантностью лучше ничего не смешивать?
 

ONK

Пассивист PHPСluba
Не будет. Мало вероятно чтобы у разных сообщений был одинаковый индекс релевантности по одному запросу (только в этом случае записи отсортировались бы и по дате). Выведи полученный индекс и посмотри на него...
 

idencial

Одинаковый
Спасибо, я так и думал.
А все-таки в случае совпадения индексов второй код с datetime в предложении order работать должен?
 

Апельсин

Оранжевое создание
теоретически - да
но тебе никто ведь не мешает проверить это самостоятельно, ведь так? ;)
 

idencial

Одинаковый
забил я на это бред. НИхрена не работает. Дата все перебивает.
Лучше просто рядом ссылочку буду делать "сортировать по дате"
 

ONK

Пассивист PHPСluba
Что значит перебивает?

.... ORDER BY relev, datetime ......

Здесь дата ничего не должна "перебивать", чтобы сортировалось по datetime relev должен быть везде одинаковый. Странно....
 

idencial

Одинаковый
Написал
PHP:
... ORDER BY relev, datetime DESC......
Он мне взял и просто отсортировал по дате.
Т.е я выводил индексы релевантности, так он взял записи с индексом 0, но датой 4.07.2003 и поместил на первое место.
Там где дата старая, но индекс 11.234234234 оказались в конце
 

Апельсин

Оранжевое создание
гм, ну если ты хочешь что бы у тебя и по релевантности и по дате сортировалось по убыванию, то да.
 

idencial

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

ЗЫ. Кстати, а кто-нибудь в курсе при каких услових MySQL высчитывает коэффициент релевантности 0.
У меня, например, совпадения есть и не одно, но запрос - часть слова и он считает коэфф. 0
 

Апельсин

Оранжевое создание
оно в твоем случае будет целые слова искать, а т.к. таких целых слов не находит, потому и 0.
 

idencial

Одинаковый
Мой случай вот
PHP:
SELECT distinct *, MATCH ftext AGAINST ('$good') + MATCH title AGAINST ('$good') AS relev FROM $tablename[immod] where (ftext LIKE '%". str_replace(" ", "%' OR ftext LIKE '%", $good). "%') OR (title LIKE '%". str_replace(" ", "%' OR title LIKE '%", $good). "%') ORDER BY relev DESC, ast DESC
Я так понимаю здесь ищет он и по целому и по частичному, а коэффициент считает только по целому.
Как сделать, чтобы и коэфф. считал по частичному?
 

Yurik

/dev/null
Для разбивки текста на слова MySQL использует очень простой синтаксический анализатор. ``Словом'' является любая последовательность символов, состоящая из букв, чисел, знаков `'' и `_'. Любое ``слово'', присутствующее в стоп-списке (stopword) или просто слишком короткое (3 символа или меньше), игнорируется.

Каждое правильное слово в наборе проверяемых текстов и в данном запросе оценивается в соответствии с его важностью в этом запросе или наборе текстов
т.е. по частичному FULLTEXT никогда не работал
 

ONK

Пассивист PHPСluba
Вот отсюда у тебя нули и берутся, выброси все LIKE из запроса...
 

idencial

Одинаковый
Я понял ты имеешь ввиду запрос
PHP:
$query = "SELECT title, date_format(material_date,'%e.%c.%y') AS date1, IF(text like '%". $good_words. "%', ". (substr_count($good_words, " ") + 1). "*10, 0) + IF(text LIKE '%". str_replace(" ", "%', 9, 0) + IF(text LIKE '%", $good_words). "%', 9, 0) AS relevance FROM table WHERE text LIKE '%". str_replace(" ", "%' OR text LIKE '%", $good_words). "%' ORDER BY relevance DESC, material_date DESC";
Но там в этой статье он также приводит такой запрос
PHP:
SELECT title, date_format(material_date,'%e.%c.%y') AS date1, MATCH text AGAINST('word1 word2 word3') AS relevance FROM table WHERE text LIKE '%word1%' OR text LIKE '%word2%' OR text LIKE '%word3%' ORDER BY relevance DESC, material_date DESC
Т.е он как раз совмещает MATCH & LIKE

ЗЫ. ИмХО самопальная релевантность в первом запросе будет хуже считать (да и медленнее) чем во втором запросе
 

idencial

Одинаковый
Ну врядли самопальная релевантность будет лучше и быстрее считаться чем совмещение MATCH & LIKE
 
Сверху