mysql ошибка полнотекстового поиска - PullRequest
7 голосов
/ 13 февраля 2011

Я пытаюсь добавить полнотекстовый поиск в существующую таблицу.Когда я попробовал:

alter table tweets add fulltext index(tags);

Я получил ошибку:

ERROR 1214 (HY000): The used table type doesn't support FULLTEXT indexes

в чем проблема?Как я могу узнать, что это за тип таблицы?

Ответы [ 2 ]

10 голосов
/ 13 февраля 2011

Если вы хотите использовать полнотекстовое индексирование, вам нужно убедиться, что основным механизмом вашей таблицы является MyISAM.Вы можете изменить это, используя ALTER TABLE tweets ENGINE = MYISAM;

6 голосов
/ 13 февраля 2011

Вот как вы проверяете тип таблицы:

SELECT table_schema,engine FROM information_schema.tables WHERE table_name='tweet';

Только MyISAM поддерживает FULLTEXT Indexes.

Возможно, вы также захотите выгрузить список стоп-слов.

Нажмите здесь для стоп-слов, которые FullText Indexing обычно игнорировали бы.

Вы можете переопределить это следующим образом:

1) Создать текстовый файл в /var/lib/mysql вот так

echo "a" > /var/lib/mysql/stopwords.txt<BR>
echo "an" >> /var/lib/mysql/stopwords.txt<BR>
echo "the" >> /var/lib/mysql/stopwords.txt<BR>

2) Добавьте это к /etc/my.cnf

ft_stopword_file=/var/lib/mysql/stopwords.txt<BR>
ft_min_word_len=2

3) перезапуск службы mysql

Вот еще кое-что, что следует учитывать:

Возможно, вы не захотите преобразовывать «твиты» таблицы в MyISAM.

1) Если в таблице «твиты» InnoDB содержится CONSTRAINT(s).

2) Еслитаблица InnoDB «твиты» является родителем других таблиц InnoDB с ограничениями внешнего ключа обратно на «твиты».

3) Вы не можете позволить блокировку таблицы «твиты» на уровне таблиц..

Помните, что каждый INSERT в таблице 'твитов' будет вызывать блокировку на уровне таблицы, если бы это была таблица MyISAM.Поскольку в настоящее время это таблица InnoDB (которая выполняет блокировку на уровне строк), таблица «твитов» может быть очень быстро преобразована в INSERTed.

Многие хотят создать отдельную таблицу MyISAM, называемуюtweets_tags, с тем же Первичным ключом таблицы 'твитов' и столбцом TEXT, который называется 'тегами', таким же, как в таблице 'твитов'. ​​

Затем выполните начальную загрузку tweets_tagsкак это:

INSERT INTO tweets_tags (id,tags) SELECT id,tags FROM tweets;

Затем периодически (каждую ночь или каждые 6 часов) загружайте новые твиты в твиты: теги вроде этого:

INSERT INTO tweets_tags (id,tags) SELECT id,tags FROM tweets WHERE id > (SELECT max(id) FROM tweets_tags);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...