SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 21.05.2009 15:52:37

telemnal
Участник
Зарегистрирован: 21.05.2009
Сообщений: 2

Странное поведение MATCH AGAINST


CREATE TABLE IF NOT EXISTS `test` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `a` varchar(255) NOT NULL,
  `b` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

ALTER TABLE test ADD FULLTEXT(a);
ALTER TABLE test ADD FULLTEXT(b);

INSERT INTO test(a,b) VALUES('dsa', 'dsa');

SELECT *, MATCH a AGAINST('dsa')+MATCH b AGAINST('dsa') as rel FROM test
 

Релевантность почему-то равна всегда 0. Даже не знаю в чем дело.

MySQL client version: 5.0.77
MySQL charset:  UTF-8 Unicode (utf8)

Неактивен

 

#2 21.05.2009 16:47:50

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Странное поведение MATCH AGAINST

Ничего странного wink

1. utf8
2. Короткие слова (ft_min_word_len по умолчанию 4)
3. Мало строк и мало слов в строках

Третье поясню: когда в большинстве строк индекса есть одно и то же слово, то оно
считается стопсловом и из индекса исчезает. В вашем случае это 100%.

Залейте пяток строк с текстами, тогда индекс будет работать. Ну и в cp1251, utf8 не
будет работать, скорее всего.

Неактивен

 

#3 21.05.2009 19:52:51

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Странное поведение MATCH AGAINST

Почему с utf8 не должно работать?

Неактивен

 

#4 21.05.2009 20:01:34

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Странное поведение MATCH AGAINST

Попробуй — не работает. Движок не умеет вычленять пробельные символы. Документированная бага.

Неактивен

 

#5 21.05.2009 22:26:16

telemnal
Участник
Зарегистрирован: 21.05.2009
Сообщений: 2

Re: Странное поведение MATCH AGAINST

paulus написал:

Ничего странного wink

1. utf8
2. Короткие слова (ft_min_word_len по умолчанию 4)
3. Мало строк и мало слов в строках

Третье поясню: когда в большинстве строк индекса есть одно и то же слово, то оно
считается стопсловом и из индекса исчезает. В вашем случае это 100%.

Залейте пяток строк с текстами, тогда индекс будет работать. Ну и в cp1251, utf8 не
будет работать, скорее всего.

Про ft_min_word_len я знал просто неудачный пример, а вот вот про стопслово был не в курсе. Спасибо большое за поддержку. Теперь все работает (c utf8).

Отредактированно telemnal (21.05.2009 22:28:54)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson