首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含特殊字符的全文搜索

包含特殊字符的全文搜索
EN

Stack Overflow用户
提问于 2016-02-18 23:38:32
回答 3查看 1K关注 0票数 1

我有一个表,上面有诸如"F-10“或"Jim-beam”之类的值。如果用户搜索了"F10“或"Jimbeam”,我有没有办法得到这些结果?基本上,用户可能不知道条目中有破折号,但我希望搜索足够宽大,以便找到它。

现在我正在尝试使用:

代码语言:javascript
复制
SELECT *
WHERE
    CONTAINS(table.*, ,'"F10*" Or "Jimbeam*"')
EN

回答 3

Stack Overflow用户

发布于 2016-02-18 23:42:33

您可以创建数组来从用户处获取插入的值

然后对数组中的每个值使用like %value1%或like %value2%

这可能是一种解决方案

票数 0
EN

Stack Overflow用户

发布于 2016-02-19 00:24:30

您可以尝试将数据库中的值替换为不包含任何特殊字符的值。我之前使用了这个答案中描述的函数:https://stackoverflow.com/a/1008566/894974,因此安装了该函数后,where子句将变为:

代码语言:javascript
复制
where dbo.RemoveNonAlphaCharacters([columnToSearch]) like '%'+@searchString+'%'
票数 0
EN

Stack Overflow用户

发布于 2016-02-19 04:40:54

您可以创建一个单独的列,在该列中删除这些单词中的破折号,然后对该列执行全文搜索。

例如,您的表可能如下所示(或者新列可能是新表的一部分):

代码语言:javascript
复制
Id  Text            TextForFullTextSearch
-----------------------------------------
1   Jim-beam        Jimbeam
2   F-10            F10
3   blah blah       blah blah

如果您需要同时支持"Jimbeam*""Jim-beam*"上的搜索,那么您可以对旧的和新的列执行全文搜索。

这确实需要您将文本存储两次,以便在您的流程中有更多的齿轮。好处将是在搜索精度和性能(如将会慢得多),所以你必须权衡这些好处和增加的复杂性。

在插入和更新数据时填充新列的一些想法:

  • 在您的数据层中处理此问题,即所有insert和update语句都应包含文本和对表的insert/update触发器,每当插入或更新文本时,该触发器就会同时更新自动作业,该作业会不断轮询表中是否有插入/更新,然后相应地更新TextForFullTextSearch。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35485818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档