2012-08-31 65 views
-1

我必須拿出搜索設計。搜索的數據不是文檔類型。要搜索的數據實體是醫療程序,基本上由一個/兩個/三個字組成。這些詞是由管理員預先定義的。例如:血管成形術,隆鼻術,腎上腺手術,ACTH模擬試驗等。如何實施以下搜索類型:

最終用戶從選擇中選擇過程名稱,並將用戶的選擇存儲在數據庫中。最終用戶是指正在創建他的個人資料的用戶。

我使用用戶標識將單獨的表中的關鍵字編入索引。因此,如果三位用戶添加了隆鼻,我將在索引表中有三個條目。其他程序也是如此。

 
Procedure Name | User ID| 
------------------------- 
Rhinoplasty  1 
Rhinoplasty  2 
Rhinoplasty  3 
Adrenal Surgery 2 
Adrenal Surgery 3 
Angioplasty  1 

And so on . 

的問題,當一些用戶嘗試搜索程序(這導致他的配置文件)。他在上面寫上「腎上腺手術」爲「腎上腺手術」或「血管成形術」爲「成形術」或「出現ACTH模擬測試「作爲」ACTH的模擬測試「。某些時候,程序也可以具有同義詞/首字母縮略詞。

我理解停用詞的概念。我可以在他們的下面定義常用詞語,如「手術」和「測試」。剝離這些停用詞的索引表並剝離搜索查詢。

我該如何實現同義詞?還有更好的方式來實現這樣的搜索嗎?我不認爲我可以看看lucene或solr,因爲它們是全文搜索引擎。

+0

爲什麼不給每個程序添加標籤?例如對於ACTH,標籤可以是ACTH,模擬,測試..並且可以將每個過程的同義詞作爲標籤添加 –

+0

您寫道,過程名稱是預定義的,其中大約有1000個。你不能用兩步選擇(30x30)而不是搜索 - 用戶選擇一組相關的程序,然後選擇該組的特定程序? (我知道這不能回答你的問題。) – Arvo

回答

2

聽起來像是你需要某種形式的全文檢索解決方案,看看solr或者少一些重量級sphinx

對於單獨的模糊匹配,您可以嘗試使用您的數據庫系統內置的全文索引,mysqlprogresql都有一個。 Postgres也支持同義詞詞典。

+0

我不知道模糊匹配。這是用於同義詞嗎?另外solr,是不是基於文檔的搜索?我手頭上有固定的名字。 –

+0

模糊匹配意味着您可以指定'term0 term1',如果您的內容是term1 term0,它仍然匹配。 Solr可以索引任何你想要的東西,但肯定是一個重量級的解決方案,必須將你的數據導入它等。 – complex857

0
Try using using like clause in your query 
SELECT * from TABLENAME WHERE Procedure Name like "%Surgery Adrenal%"; 
+0

這不行,想想1000個這樣的程序名。如果不使用至少停用詞,上面將提供很多匹配。 Alredy嘗試了這種方法。無論如何感謝您的回覆。 –