MySQL 全文搜索触发

MySQL Trigger With Full-Text Search

我在 mysql 上有一个 innodb table 像这样:

create table person (
    id int not null auto_increment primary key,
    name varchar(512),
    birthdate date,
    ...
    id_most_relevant int,
    fulltext(name)
);

我想创建一个触发器,每当有人更新时,触发器将搜索具有最相关名称的其他人(通过使用全文搜索)并将他的 ID 放在 id_most_relevant 更新人员的字段,但前提是此相关性超过 95%。因此,为了获得百分比相关性,我将每个人的相关性与更新的人的新名称的相关性相除。类似于:

SELECT id FROM PERSON
INTO _id_most_relevant
WHERE
    MATCH (name) AGAINST (_new_name) / 
    MATCH (new.name) AGAINST (_new_name) > 0.95

变量 _id_most_relevant 和 _new_name 之前在触发器上声明,变量 _id_most_relevant 将用于更新 person table on id=NEW.id.

有人知道如何触发吗?

我正在使用 Mysql 5.6,我无法更新它,但如果需要,我可以创建一个辅助 table。

CREATE TRIGGER tr_bu_person
BEFORE UPDATE
ON person
FOR EACH ROW 
SET NEW.id_most_relevant = ( SELECT id
                             FROM person
                             WHERE id <> NEW.id
                             ORDER BY MATCH (name) AGAINST (new.name) DESC
                             LIMIT 1 );

但我会避免在触发器中使用 FTS - 我更愿意将此列设置为 NULL(或完全删除它)并将其更新为行中最相关的行 id 值检索查询(或者,也许,通过事件过程)。

我发现使用触发器无法解决这个问题,因为每当我更新一个人的名字时,我都需要已经更新的全文索引才能获得第二个 MATCH(在分母上),但全文索引它仅在 tigger 执行后更新(即使它是更新后触发器)。

所以我必须使用其他方式解决这个问题,没有触发器。

也就是说,我会关闭这个 post。