2012-08-31 68 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尝试了这种方法。无论如何感谢您的回复。 –