背景:我正在尝试使用一种流行的“标准”医疗编码系统,该系统使用定义良好的映射提供预先制作的“关键字”表。
简而言之,它基本上将文本描述中的每个单词映射到一个更短的规范化关键字,如下所示:
数据记录id : desc
* 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查询。
然而,我正在寻找的是通过能够返回部分匹配来提高可用性的东西,以便困惑并搜索“贡科洛-2500图像上传”的用户不会得到空白结果,而是“最接近的匹配”。
* 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+记录)上。也就是说,它弄脏了自己,然后窒息而死。
发布于 2011-07-06 00:13:32
我猜你没忘了把索引放到表上吧?实际上(除非我没有遗漏什么)这里不需要子查询。
SELECT rec_id, count(keyword) as matches FROM index_tbl WHERE keyword = 'KEY1' ... GROUP BY rec_id;https://stackoverflow.com/questions/6584527
复制相似问题