mysql - 带有全文搜索的 MySQL 触发器
问题描述
我在 mysql 上有一个 innodb 表,如下所示:
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 将用于更新 id=NEW.id 上的人员表。
任何人都知道如何触发该触发器?
我使用的是 Mysql 5.6,无法更新,但如有必要,我可以创建一个辅助表。
解决方案
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
行检索查询中最相关的行值(或者,也许,通过事件过程)。
推荐阅读
- sql-server - 将不同数据库备份的数据合并到 SQL Server 中的单个主数据库中
- tfs - 迁移后缺少默认项目团队
- php - Twilio 任务路由器无法正常用于会议
- java - “gradlew setupEclipse”抛出错误?
- c# - Unity 可空整数作为检查器字段
- android - Xamarin prism 依赖服务方法无法在本机中获取当前上下文中的变量
- spring-boot - 在 Cloud Foundry 上演示 Spring 批处理应用程序的最佳方式
- python - jupyter notebook 到 python 脚本,不改变格式
- c++ - DLL 将抽象基类作为参数导出到成员函数 - C++
- mongodb - 子文档中同一集合中的 mongodb 聚合和 $lookup