Gre*_*man 42 sql-server full-text-search
注:我正在使用SQL的全文搜索功能,蕴含条款和所有人-*是全文的通配符,%是只喜欢条款.
我已经在几个地方读过,因为MS SQL不支持"前导通配符"搜索(例如使用"*overflow"来匹配"stackoverflow").我正在考虑使用CLR函数来添加正则表达式匹配,但我很想知道人们可能会有哪些其他解决方案.
更多信息:您只能在单词或短语的末尾添加星号. - 以及我的经验经验:匹配"myvalue"时,"my*"有效,但"(星号)值"返回不匹配,执行查询时简单如下:
SELECT * FROM TABLENAME WHERE CONTAINS(TextColumn, '"*searchterm"');
Run Code Online (Sandbox Code Playgroud)
因此,我需要一个解决方法.我只在实际搜索页面上使用我的网站搜索 - 所以它的工作方式基本上与Google的工作方式相同(在Joe Sixpack类型的用户眼中).不是那么复杂,但这种匹配真的不应该失败.
xna*_*gyg 25
仅针对前导通配符的解决方法:
找到带有*的反转文本
SELECT *
FROM TABLENAME
WHERE CONTAINS(TextColumnREV, '"mrethcraes*"');
Run Code Online (Sandbox Code Playgroud)当然有许多缺点,只是为了快速解决方法......
更不用说CONTAINSTABLE了......
小智 9
可以在单词或短语(前缀搜索)的末尾使用通配符"*".
例如,此查询将找到所有"数据库","数据库","数据库"......
SELECT * FROM SomeTable WHERE CONTAINS(ColumnName, '"datab*"')
Run Code Online (Sandbox Code Playgroud)
但是,不可思议的是,无法使用前导通配符进行搜索.
例如,此查询将找不到"数据库"
SELECT * FROM SomeTable WHERE CONTAINS(ColumnName, '"*abase"')
Run Code Online (Sandbox Code Playgroud)
注意CONTAINS:这是我在修订版 #2 中引入关键字之前针对问题的原始版本 #1 提交的答案。事实上它仍然是准确的。
SQL Server 中的通配符是%符号,无论是前导、尾随还是其他方式,它都可以正常工作。
也就是说,如果您要进行任何类型的严肃全文搜索,那么我会考虑利用全文索引功能。使用%和_通配符将导致数据库性能受到严重影响。
| 归档时间: |
|
| 查看次数: |
54770 次 |
| 最近记录: |