php - 如何实现多个关键词的映射关键词匹配以及基于点击次数的偏好?

标签 php mysql

背景:我正在尝试使用流行的“标准”医学编码系统,该系统提供预制的“关键字”表,并使用定义明确的映射。

简单来说,基本上它会获取文本描述中的每个单词并将其映射到更短的标准化关键字,如下所示:

数据记录 id:描述

* 10 : Gonkulator-2500 image reconstruction
* 11 : DICOM image upload
* 12 : SpiffyCont Image Interface 

将映射到关键字索引,如下所示:

关键字:rec_id

* GONKU : 10
* IMAGE : 10
* RECON : 10
* DICOM : 11
* IMAGE : 11
* UPLOA : 11
* SPIFF : 12
* IMAGE : 12
* INTER : 12

处理此问题的最简单(编码)方法显然是以相同方式将用户搜索输入简单地映射到关键字并执行 AND 查询。

不过,我正在寻找的是通过能够返回部分匹配来提高可用性的东西,以便感到困惑并搜索“Gonkulator-2500 image upload”的用户不会得到空白结果,但是“最近的点击”

* Gonkulator-2500 image reconstruction (66%)
* DICOM image upload (66%)
* SpiffyCont Image Interface (33%)

据我所知,我需要按照 record_id:matches 顺序的结果

* 10: 2
* 11: 2
* 12: 1

我很感激任何有关如何做到这一点的想法或指示,但是有关数据库规范化的讲座应该更正确地针对各个国际标准组织。 :)

更新:我忘了提及(我本来打算这样做。FFB 综合症再次发作)我的第一个想法是子查询:

SELECT rec_id, count(keyword) as matches 
    FROM ( 
         SELECT keyword, rec_id FROM index_tbl 
         WHERE keyword = 'KEY1'  OR keyword = 'KEY2' OR ...etc
     )
GROUP BY rec_id; 

但是 ISTR 认为 mysql 不能很好地处理子查询,尤其是在巨大的表(1M+ 记录)上。也就是说,它弄脏了自己,然后窒息而死。

最佳答案

我猜你没有忘记在表上放置索引?实际上(除非我没有遗漏什么)你在这里不需要子查询。

SELECT rec_id, count(keyword) as matches FROM index_tbl WHERE keyword = 'KEY1' ... GROUP BY rec_id;

关于php - 如何实现多个关键词的映射关键词匹配以及基于点击次数的偏好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6584527/

相关文章:

PHP 文件未正确回显

javascript - 具有许多AJAX调用性能的网页

python - 使用 MySQL 容器对 Django 应用程序进行 Dockerize

python - 如何在python中指定时间后自动关闭mysql连接?

php - 在 android studio 中使用时注册 php 不工作

php - PHP 中 Big5 转换为 UTF-8

javascript - 根据单击的 Div 更新数据库

MySQL - 如果 x 不为空,则连接表

php - 从数据库中提取内容时如何删除 br?

MySQL从5.1更新后字符编码错误