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。
我在 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。