存储引擎内存不支持全文索引



我正在更改我正在处理的一个小 Web 应用程序,从使用 LIKE 到 MATCH 进行字符串查询,但我遇到了一个需要工作的特定查询的问题(不是完整的查询,但为了简洁起见,我删除了所有额外的内容(:

SET @n=0;
SET @pubdate='';
SELECT a.idArticle, CONCAT(a.date, '_', LPAD(a.n, 3, '0')) as alt_id, a.source, a.title, a.datetime
FROM (SELECT idArticle,title,datetime,source, @n:=CASE WHEN @pubdate = date(datetime) THEN @n + 1 ELSE 1 END AS n, @pubdate:=date(datetime) as date FROM article ORDER BY date, idArticle) a 
WHERE (MATCH(title) AGAINST ('query') ) 
ORDER BY a.idArticle DESC

此查询允许我以"YYYY-MM-DD_n"格式为文章生成 ID,其中日期是文章的发布日期,n 是使用该日期输入数据库的第 N 篇文章(因此 2020 年 5 月 20 日发布的第 22 篇文章将是 2020-05-20_022(。

运行查询时,我收到错误:

#1214 - The storage engine MEMORY doesn't support FULLTEXT indexes

这里提出的类似问题告诉人们将InnoDB更改为MyISAM,因为InnoDB过去不支持全文搜索。我正在通过 XAMPP 运行 MariaDB 10.3.16,它必须足够新才能不适用,因为这样的查询有效,并且根据SHOW TABLE STATUS FROM database,我的所有表都在 InnoDB 上运行:

SELECT * from article WHERE MATCH(title) AGAINST ("query")

所以,它似乎是花哨的递增子查询,但我不知道为什么这会导致问题。出了什么问题,我该怎么做才能解决?

由于MEMORY表在重新启动时丢失,因此此类表上的所有索引都将丢失。 重建FULLTEXT并非易事。 简单地创建一个InnoDB表而不是MEMORY表有什么问题?

当心 @ 变量;它们可能不会按预期方式运行,尤其是在使用子查询时。

最新更新