sql server—如何进行sql查询,该查询将采用具有and或()等关键字的搜索项以及这些关键字的组合

ybzsozfc  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(272)

要求:我们必须开发一个搜索功能,用户将在文本框中输入搜索词。这些术语将在表的不同列(标题、说明、注解)中搜索。
示例;
covid-应搜索包含单词covid的记录
“covid 19 in july”-应搜索“covid 19 in july”具有完整匹配字符串的记录
covid或corona-应搜索包含单词covid或单词corona的记录
covid和corona-应该搜索包含covid和corona的记录
corona或covid和virus-应搜索可能包含单词corona但必须包含单词covid和virus的记录
此外,用户可以重载这些组合。
我们目前的做法:
目前,我们依赖于识别字符串中所有关键字的基本方法,并尝试生成动态sql查询,该查询将相应地包含where子句。
我们的问题是:
我们采用的方法非常传统,而且动态查询的生成和执行会影响性能。虽然我们经过大量的搜索都无法找到任何工作样本,文章,算法,链接,我们相信应该有更好的方法来实现这一点。因此,寻找这样的指针。

nle07wnf

nle07wnf1#

如果使用sqlserver,在文本中搜索单词或短语的最佳方法是使用全文搜索。
在您应该通过将所有列放在一个表中来更改表的结构之前,在您应该实现它之后。
使用全文搜索,您可以搜索:
一个或多个特定单词或短语(简单术语)
以特定文本(前缀词)开头的词或短语
特定单词的屈折形式(代词)
与另一个词或短语相近的词或短语(邻近词)特定词的同义形式(同义词库)
使用加权值的单词或短语(加权项)
单击此处查看许多示例查询。
以下是全文搜索和类似搜索的区别:
与全文搜索不同,like transact-sql predicate 只对字符模式起作用。此外,不能使用like predicate 查询格式化的二进制数据。此外,针对大量非结构化文本数据的like查询要比针对相同数据的等效全文查询慢得多。对数百万行文本数据的类似查询可能需要几分钟才能返回;而根据返回的行数,对同一数据进行全文查询只需几秒钟或更短的时间。

相关问题