Как исправить ошибку 1191 (HY000) MySQL, связанную с отсутствием FULLTEXT-индекса, соответствующего списку столбцов?

Как исправить ошибку "Error 1191 (HY000): Can't find FULLTEXT index matching the column list", которая возникает при выполнении запроса на MySQL, содержащего оператор MATCH AGAINST, даже после добавления индекса FULLTEXT через MySQL Workbench? Вот сам запрос:
```sql
SELECT * , MATCH `keywords` AGAINST (?) as relev FROM activities WHERE MATCH `keywords` AGAINST (?)>0 AND town = ? ORDER BY relev DESC LIMIT 15
```
  • 3 января 2024 г. 17:19
Ответы на вопрос 2
Ошибка 1191 (HY000) говорит о том, что MySQL не может найти FULLTEXT индекс, который бы подходил под список столбцов, используемых в операторе MATCH AGAINST. В вашем случае, указан только один столбец `keywords`, который должен быть проиндексирован FULLTEXT индексом.

Чтобы исправить эту ошибку, выполните следующие шаги:

1. Убедитесь, что таблица `activities` использует движок хранения (storage engine), который поддерживает FULLTEXT индексы. FULLTEXT индексы поддерживаются InnoDB (начиная с MySQL 5.6) и MyISAM.

2. Создайте FULLTEXT индекс для столбца `keywords`, если его еще нет:

```sql
ALTER TABLE activities ADD FULLTEXT (keywords);
```

3. Убедитесь, что ваш запрос использует именно те столбцы, для которых был создан индекс. Если вы создали FULLTEXT индекс только для столбца `keywords`, то в вашем запросе должен быть только этот столбец.

Пример правильного запроса:

```sql
SELECT *, MATCH(keywords) AGAINST (?) as relev 
FROM activities 
WHERE MATCH(keywords) AGAINST (?) > 0 AND town = ?
ORDER BY relev DESC 
LIMIT 15;
```

Где `?` обозначает плейсхолдер для значения, с которым вы хотите сравнивать содержимое столбца `keywords`.

Если после создания FULLTEXT индекса ошибка все еще возникает, возможно, индекс не был создан успешно, или MySQL Workbench не обновил схему таблицы в своем кэше. Проверьте наличие индекса следующим запросом:

```sql
SHOW INDEX FROM activities;
```

Ищите индекс с типом `FULLTEXT` для столбца `keywords`. Если такого индекса нет, попробуйте снова выполнить предыдущую команду для добавления индекса.

Если индекс существует и запрос по-прежнему возвращает ошибку, возможно, есть проблема с кэшем MySQL Workbench. Попробуйте обновить схему или закрыть и открыть Workbench заново.

Помните также, что при использовании InnoDB таблицы FULLTEXT индексы будут обновляться по мере изменения таблицы, в то время как для MyISAM таблиц (дефолтное поведение до версии MySQL 5.6) FULLTEXT индексы могут требовать периодического обновления с помощью команды `REPAIR TABLE`.
видимо не так создаётся индекс, show create table relev в студию, там в списке индексов должен быть и filltext для keywords
Похожие вопросы