使用 JOIN 进行 INNODB FULLTEXT 搜索:不同表上的搜索词
INNODB FULLTEXT search with JOIN: search term on different tables
我曾经将以下查询与 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);
这会在多个 table 上进行 FULLTEXT
搜索。
现在,我切换到 INNODB
并收到以下错误消息:
General error: 1210 Incorrect arguments to 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
在同一个 table.
中,这种方法就非常有效
但是如果例如key
在 table1
和 word
在 table1
我没有得到任何结果。
我该如何解决这个问题?
正如@Akina 所述,这似乎是不可能的,因为 INNODB
不允许 FULLTEXT
在两个 table 上搜索。
我将创建第三个 table 仅用于 FULLTEXT
搜索,并用来自两个 table 的数据填充它。
我曾经将以下查询与 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);
这会在多个 table 上进行 FULLTEXT
搜索。
现在,我切换到 INNODB
并收到以下错误消息:
General error: 1210 Incorrect arguments to 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
在同一个 table.
但是如果例如key
在 table1
和 word
在 table1
我没有得到任何结果。
我该如何解决这个问题?
正如@Akina 所述,这似乎是不可能的,因为 INNODB
不允许 FULLTEXT
在两个 table 上搜索。
我将创建第三个 table 仅用于 FULLTEXT
搜索,并用来自两个 table 的数据填充它。