如何实现以下类型的搜索:

时间:2012-08-31 11:59:32

标签: php sql algorithm search

我必须想出一个搜索设计。搜索到的数据不是文档类型。要搜索的数据实体是医疗程序,基本上每个由一个/两个/三个单词组成。单词由管理员预先定义。例如:血管成形术,隆鼻,肾上腺手术,ACTH模拟试验等。

最终用户从选择中选择过程名称,用户的选择存储在db中。最终用户是指正在创建其个人资料的用户。

我使用用户ID在单独的表中索引关键字。因此,对于Rhinoplasty,如果三个用户添加了它,我将在索引表中有三个条目。其他程序也是如此。

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

And so on . 

当一些用户试图搜索程序(导致他进入配置文件)时出现问题。他可能将'肾上腺手术'写成'手术肾上腺'或'血管成形术'作为'血管成形手术'或'ACTH模拟试验'作为'ACTH的模拟测试'。有时候程序也可以有synonmys / acronyms。

我理解停用词的概念。我可以在它们下面定义常用词,例如“手术”和“测试”。剥离这些停用词的索引表并删除搜索查询。

如何实现同义词?还有更好的方法来实现这样的搜索吗?我不认为我可以看看lucene或solr,因为它们是全文搜索引擎。

2 个答案:

答案 0 :(得分:2)

听起来您需要某种全文搜索解决方案,请查看solr或稍微不那么重量级sphinx

仅对于模糊匹配,您也可以尝试使用数据库系统的内置全文索引,mysqlprogresql都有一个。 Postgres也支持同义词词典。

答案 1 :(得分:0)

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