2011-07-05 33 views
0

背景:我試圖使用流行的「標準」醫療編碼系統,該系統使用定義良好的映射提供預製的「關鍵字」表。如何實現映射關鍵字匹配與多個關鍵字和基於點擊次數的偏好?

簡化,基本上它需要每一個字的文字描述和其映射到一個較短的,規範化的關鍵字,像這樣: 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圖像上傳」時不會得到空白結果,但「最近命中」

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

這麼近我自己看着辦,我需要RECORD_ID的順序結果:匹配

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

我會很感激關於如何做到這一點的任何想法或指針,但是關於數據庫規範化的講座應該更適當地指向var國際標準組織。 :)

更新:我忘了提(再次,我本來打算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 +記錄)上。也就是說,它會自己玷污,然後窒息死亡。

回答

1

我猜你沒有忘記把表上的索引?實際上(除非我沒有遺漏某些東西),你不需要這裏的子查詢。

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