Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何实现以下类型的搜索:_Php_Sql_Algorithm_Search - Fatal编程技术网

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

Php 如何实现以下类型的搜索:,php,sql,algorithm,search,Php,Sql,Algorithm,Search,我必须想出一个搜索的设计。搜索的数据不是文档类型。要搜索的数据实体是医疗程序,基本上每个实体由一个/两个/三个单词组成。这些词是由管理员预先定义的。例:血管成形术、鼻成形术、肾上腺手术、促肾上腺皮质激素模拟试验等 最终用户从选择中选择过程名称,用户的选择存储在db中。最终用户是指正在创建其个人资料的用户 我在一个单独的表中用用户id索引关键字。因此,对于鼻整形术,如果有三个用户添加了它,我将在索引表中有三个条目。其他程序也是如此 Procedure Name | User ID| -----

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

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

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

Procedure Name | User ID| ------------------------- Rhinoplasty 1 Rhinoplasty 2 Rhinoplasty 3 Adrenal Surgery 2 Adrenal Surgery 3 Angioplasty 1 And so on . 程序名称|用户ID | ------------------------- 鼻整形术1 鼻整形术2 鼻整形术3 肾上腺外科2 肾上腺外科3 血管成形术1 等等 当一些用户试图搜索程序(这会导致他进入配置文件)时会出现问题。他可能会将“肾上腺手术”写为“肾上腺手术”,或将“血管成形术”写为“血管成形术手术”,或将“ACTH模拟测试”写为“ACTH模拟测试”。有些时候,程序也可以有大纲/首字母缩略词

我理解停止语的概念。我可以在它们下面定义“手术”和“测试”等常用词。去除索引表中的这些停止词,并去除搜索查询


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

听起来你需要某种全文搜索解决方案,看看或者轻一点

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

对于fuzzy匹配,您也可以尝试使用数据库系统内置的全文索引,包括和一个特性。Postgres也支持同义词词典。

这是行不通的,想想1000个这样的过程名称。如果不使用至少停止词,上述内容将提供大量匹配。阿尔雷迪尝试了这种方法。无论如何谢谢你的回复。我不知道模糊匹配。这是同义词吗?还有solr,它不是用于基于文档的搜索吗?我手头上的是固定名称。模糊匹配意味着您可以指定
term0 term1
,如果您的内容是
term1 term0
,它仍然匹配。Solr可以为您想要的任何内容编制索引,但肯定是一个重量级的解决方案,必须将您的数据导出到其中,诸如此类。为什么不为每个过程添加标记呢?例如,对于ACTH,标签可以是ACTH、simulation、test。。您可以将每个过程的同义词添加为您编写的标记,过程名称是预定义的,大约有1000个。你不能用两步选择(30x30)代替搜索吗?用户选择一组相关的过程,然后从该组中选择一个特定的过程?(我知道这不能回答你的问题。)