要求:我们必须开发一个搜索功能,用户可以在文本框中输入搜索词。这些术语将在表的不同列(标题、说明、注释(中进行搜索。
示例;
新冠肺炎-应搜索包含单词新冠肺炎的记录
"新冠肺炎7月19日应该搜索具有";新冠肺炎7月19日";有一个完整的匹配字符串
新冠肺炎或Corona-应搜索包含单词新冠肺炎或单词Corona的记录
新冠肺炎和科罗纳-应搜索包含新冠肺炎和科罗纳字样的记录
Corona或新冠肺炎和病毒-应搜索可能有Corona字样但必须有新冠肺炎和病毒的记录
此外,用户可以重载这些组合。
我们目前的方法:
目前,我们依赖于识别字符串中所有关键字的基本方法,并尝试生成具有WHERE子句的动态SQL查询。
我们的问题:
我们采用的方法非常传统,此外,动态查询的生成及其执行会对性能造成影响。尽管经过大量搜索,我们找不到任何工作样本、文章、算法和链接,但我们相信应该有更好的方法来实现这一点。因此,寻找这样的指针。
如果使用SQLSERVER,在文本中搜索单词或短语的最佳方法是使用全文搜索。
在您应该通过将所有列放在一个表中来更改表的结构之前,并在实现它之后
使用全文搜索,您可以搜索:
- 一个或多个特定单词或短语(简单术语(
- 一个单词或短语,其中单词以指定的文本开头(前缀术语(
- 特定单词的屈折形式(生成术语(
- 与另一单词或短语相近的单词或短语(邻近词(特定单词的同义形式(词库(
- 使用加权值的单词或短语(加权术语(
单击此处查看示例的许多查询。
下面是全文搜索和LIKE搜索之间的区别:
与全文搜索相比,LIKE Transact-SQL谓词仅适用于字符模式。此外,不能使用LIKE谓词查询格式化的二进制数据。此外,针对大量非结构化文本数据的LIKE查询比针对相同数据的等效全文查询慢得多。针对数百万行文本数据的LIKE查询可能需要几分钟才能返回;而根据返回的行数,针对相同数据的全文查询可能只需要几秒钟或更短的时间。