如何进行Sql查询,该查询将采用具有AND OR()等关键字的搜索词及其组合



要求:我们必须开发一个搜索功能,用户可以在文本框中输入搜索词。这些术语将在表的不同列(标题、说明、注释(中进行搜索。

示例;

新冠肺炎-应搜索包含单词新冠肺炎的记录

"新冠肺炎7月19日应该搜索具有";新冠肺炎7月19日";有一个完整的匹配字符串

新冠肺炎或Corona-应搜索包含单词新冠肺炎或单词Corona的记录

新冠肺炎和科罗纳-应搜索包含新冠肺炎和科罗纳字样的记录

Corona或新冠肺炎和病毒-应搜索可能有Corona字样但必须有新冠肺炎和病毒的记录

此外,用户可以重载这些组合。

我们目前的方法:

目前,我们依赖于识别字符串中所有关键字的基本方法,并尝试生成具有WHERE子句的动态SQL查询。

我们的问题:

我们采用的方法非常传统,此外,动态查询的生成及其执行会对性能造成影响。尽管经过大量搜索,我们找不到任何工作样本、文章、算法和链接,但我们相信应该有更好的方法来实现这一点。因此,寻找这样的指针。

如果使用SQLSERVER,在文本中搜索单词或短语的最佳方法是使用全文搜索。

在您应该通过将所有列放在一个表中来更改表的结构之前,并在实现它之后

使用全文搜索,您可以搜索:

  • 一个或多个特定单词或短语(简单术语(
  • 一个单词或短语,其中单词以指定的文本开头(前缀术语(
  • 特定单词的屈折形式(生成术语(
  • 与另一单词或短语相近的单词或短语(邻近词(特定单词的同义形式(词库(
  • 使用加权值的单词或短语(加权术语(

单击此处查看示例的许多查询。

下面是全文搜索和LIKE搜索之间的区别:

与全文搜索相比,LIKE Transact-SQL谓词仅适用于字符模式。此外,不能使用LIKE谓词查询格式化的二进制数据。此外,针对大量非结构化文本数据的LIKE查询比针对相同数据的等效全文查询慢得多。针对数百万行文本数据的LIKE查询可能需要几分钟才能返回;而根据返回的行数,针对相同数据的全文查询可能只需要几秒钟或更短的时间。