【问题标题】:How to create a FULLTEXT index for two tables in MySQL?如何为 MySQL 中的两个表创建 FULLTEXT 索引?
【发布时间】:2020-10-03 16:41:09
【问题描述】:

我有两张类似这样的表格:

表#1:

CREATE TABLE iteminfo
(Code CHAR(1) PRIMARY KEY,
Tags TEXT NOT NULL);

表 #2:

CREATE TABLE items
(ID INT UNSIGNED PRIMARY KEY,
Name VARCHAR(255) NOT NULL,
Code CHAR(1),
FOREIGN KEY (Code) REFERENCES iteminfo(Code));

我想使用两个表中的名称和标签字段创建一个 FULLTEXT 索引。我会假设我将不得不使用 EQUIJOIN 或类似的东西,但这不起作用:

ALTER TABLE items JOIN iteminfo WHERE items.Code = iteminfo.Code
ADD FULLTEXT (Name, Tags);

我想知道:

这甚至可能吗? 如果是,那我该怎么做? 如果不是,那么还有哪些其他方法可以索引不同表中存在的两列?

感谢您提前回答!如果这个问题已经存在,但我在网上找不到答案,我深表歉意。

【问题讨论】:

  • 索引不能跨表列应用
  • 很高兴您找到了解决问题的方法。但是,实际的答案/解决方案应该被编辑到您的问题中。一般来说,您应该edit澄清该问题,但不要在其中包含答案。您应该使用用于解决问题的代码/解决方案创建自己的答案,然后接受它(系统可能需要 48 小时延迟才能这样做)。当你自己解决了问题时,answering your own question is encouraged

标签: mysql indexing full-text-search


【解决方案1】:

没有。

但是...将各个表中的各个列收集到一个列中并对其应用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);

(之后,对itemsiteminfo 的更改还需要修改search_info。)

【讨论】:

  • 感谢您的回复。我会尝试你的建议。
【解决方案2】:

我厌倦了@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);

【讨论】:

    猜你喜欢
    • 2016-06-05
    • 1970-01-01
    • 2015-12-24
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多