如何为 MySQL 中的两个表创建 FULLTEXT 索引?
How to create a FULLTEXT index for two tables in MySQL?
我有两个看起来像这样的表:
Table #1:
CREATE TABLE iteminfo
(Code CHAR(1) PRIMARY KEY,
Tags TEXT NOT NULL);
Table #2:
CREATE TABLE items
(ID INT UNSIGNED PRIMARY KEY,
Name VARCHAR(255) NOT NULL,
Code CHAR(1),
FOREIGN KEY (Code) REFERENCES iteminfo(Code));
我想使用两个表中的名称和标签字段创建全文索引。我假设我将不得不使用 EQUIJOIN 或类似的东西,但这不起作用:
ALTER TABLE items JOIN iteminfo WHERE items.Code = iteminfo.Code
ADD FULLTEXT (Name, Tags);
我想知道:
这甚至可以做到吗?
如果是,那我该怎么做?
如果不是,那么还有什么其他方法可以索引不同表中存在的两列?
感谢您提前回答!如果这个问题已经存在,但我无法在网上找到答案,我深表歉意。
没有
但是...将各个表中的各个列收集到一个列中并对其应用 FULLTEXT
索引是有意义的。
假设每个 item
有很多标签,您可以通过以下方式初始化:
CREATE search_info ( PRIMARY KEY(name) )
SELECT name,
CONCAT(name, ' ',
( SELECT GROUP_CONCAT(tags) FROM iteminfo
WHERE code = items.code ) ) AS search
FROM items;
然后
ALTER TABLE search_info ADD FULLTEXT(search);
(之后对items
或iteminfo
的修改也需要修改search_info
。)
我厌倦了@RickJames 的回答中的建议,它似乎是我问题的解决方案。对于可能想知道的任何其他人,这是我所做的,但与我在原始问题中提供的信息相关:
ALTER TABLE items ADD COLUMN Tags TEXT;
UPDATE items
SET search = CONCAT(name, ' ', (SELECT GROUP_CONCAT(tags) FROM iteminfo WHERE code = items.code))
WHERE Code IS NOT NULL;
ALTER TABLE items ADD FULLTEXT(Tags);
我有两个看起来像这样的表:
Table #1:
CREATE TABLE iteminfo
(Code CHAR(1) PRIMARY KEY,
Tags TEXT NOT NULL);
Table #2:
CREATE TABLE items
(ID INT UNSIGNED PRIMARY KEY,
Name VARCHAR(255) NOT NULL,
Code CHAR(1),
FOREIGN KEY (Code) REFERENCES iteminfo(Code));
我想使用两个表中的名称和标签字段创建全文索引。我假设我将不得不使用 EQUIJOIN 或类似的东西,但这不起作用:
ALTER TABLE items JOIN iteminfo WHERE items.Code = iteminfo.Code
ADD FULLTEXT (Name, Tags);
我想知道:
这甚至可以做到吗? 如果是,那我该怎么做? 如果不是,那么还有什么其他方法可以索引不同表中存在的两列?
感谢您提前回答!如果这个问题已经存在,但我无法在网上找到答案,我深表歉意。
没有
但是...将各个表中的各个列收集到一个列中并对其应用 FULLTEXT
索引是有意义的。
假设每个 item
有很多标签,您可以通过以下方式初始化:
CREATE search_info ( PRIMARY KEY(name) )
SELECT name,
CONCAT(name, ' ',
( SELECT GROUP_CONCAT(tags) FROM iteminfo
WHERE code = items.code ) ) AS search
FROM items;
然后
ALTER TABLE search_info ADD FULLTEXT(search);
(之后对items
或iteminfo
的修改也需要修改search_info
。)
我厌倦了@RickJames 的回答中的建议,它似乎是我问题的解决方案。对于可能想知道的任何其他人,这是我所做的,但与我在原始问题中提供的信息相关:
ALTER TABLE items ADD COLUMN Tags TEXT;
UPDATE items
SET search = CONCAT(name, ' ', (SELECT GROUP_CONCAT(tags) FROM iteminfo WHERE code = items.code))
WHERE Code IS NOT NULL;
ALTER TABLE items ADD FULLTEXT(Tags);