Против не вернуть счет - PullRequest
1 голос
/ 06 мая 2011

Что-то не так с этим запросом? Этот работает иногда, а иногда нет. Например, со словом «семь» он не возвращает никакого результата, но я знаю, что он появляется в 29 строках, по крайней мере, в теле, но возвращается как счет 0.

Другими словами, все работает нормально, но не с этим. Кто-нибудь знает почему или есть другое решение, чтобы отсортировать его по релевантности?

   SELECT *, 
         ( (MATCH(articles.name) AGAINST('seven'))*5 +
           (MATCH(articles.subtitle) AGAINST('seven'))*3 + 
           (MATCH(articles.body) AGAINST('seven'))) AS search_score 
     FROM articles 
LEFT JOIN matches ON articles.match=matches.id 
 ORDER BY search_score DESC

РЕДАКТИРОВАТЬ: я заметил, что «семь» это стоп-слово. Есть другой способ сделать это? 1007 * игнорируемых слов *

Ответы [ 2 ]

0 голосов
/ 06 мая 2011

Проблема
Если слово слишком распространено, то есть встречается в 50% + строк, MySQL считает его STOP-словом и не будет соответствовать ему.
Тогда естьсписок стоп-слов (который вы уже заметили)
См .: http://dev.mysql.com/doc/refman/5.5/en/fulltext-stopwords.html

Решение
Этот ответ: гдередактировать полнотекстовые списки стоп-слов mysql?
Сообщает, как переопределить / заменить список стоп-слов по умолчанию.

Вот ссылка на страницу документации MySQL: http://dev.mysql.com/doc/refman/5.5/en/fulltext-fine-tuning.html

0 голосов
/ 06 мая 2011

Добавьте COALESCE (значение 0) вокруг каждого счета.

...