【发布时间】:2021-02-17 08:07:07
【问题描述】:
我曾经用MyISAM 使用以下查询:
SELECT *, table2.columnx
FROM table1
LEFT JOIN table2 ON table1.columnx_id = table2.id
WHERE MATCH(table1.columny, table2.columnx) AGAINST("+key* +word*" IN BOOLEAN MODE);
这会在多个表上进行FULLTEXT 搜索。
现在,我切换到INNODB 并收到以下错误消息:
一般错误:1210 MATCH 的参数不正确
我重写了如下查询以删除错误消息并使其正常工作:
SELECT *, table2.columnx
FROM table1
LEFT JOIN table2 ON table1.columnx_id = table2.id
WHERE MATCH(table1.columny) AGAINST("+key* +word*" IN BOOLEAN MODE)
OR MATCH(table2.columnx) AGAINST("+key* +word*" IN BOOLEAN MODE);
只要所有搜索字词 key 和 word 都在同一个表中,这就会非常有效。
但是如果例如key 在 table1 和 word 在 table1 我没有得到任何结果。
我该如何解决这个问题?
【问题讨论】:
-
使用这 2 列并根据参考创建第三个表。通过该表创建 FT 索引并在查询中使用它。通过触发逻辑更新此表数据。
-
@Akina 我会这样做的。但总的来说:
INNODB可能会出现这种情况,还是根本不可能,但只有MyISAM? -
我没有看到不允许在任何引擎(当然支持 FTS)上使用此技术的限制。
-
@Akina 我说的是我的问题,而不是你的评论。
-
这是唯一的可能性吗,因为 INNODB 不允许在两个表上进行 FULLTEXT 搜索 - 我提供了以此为基础的逻辑。
标签: mysql sql full-text-search left-join innodb