如何让领先的通配符全文搜索在 SQL Server 中工作?

注意:使用 SQL 的全文搜索功能、CONTAINS 子句和所有 - * 是全文中的通配符,% 仅用于 LIKE 子句.

我已经在几个地方读到过 MS SQL 不支持“前导通配符”搜索(例如使用“*overflow”来匹配“stackoverflow”)。我正在考虑使用 CLR 函数添加正则表达式匹配,但我很想知道人们可能有哪些其他解决方案。

更多信息你只能在单词或短语的末尾添加星号。 - 根据我的经验:匹配 'myvalue' 时,'my*' 有效,但 '(asterisk)value' 不返回匹配项,执行时一个简单的查询:

SELECT * FROM TABLENAME WHERE CONTAINS(TextColumn, ''*searchterm'');

因此,我需要一个解决方法。我只在我的网站上的实际搜索页面上使用搜索 - 所以它的工作方式需要与 Google 的工作方式基本相同(在 Joe Sixpack 类型的用户眼中)。没有那么复杂,但这种匹配确实不应该失败。

请先 登录 后评论

6 个回答

user9569

仅供参考,Google 不会进行任何向右或向左的子字符串搜索或截断。他们有一个通配符 * 来查找短语中的未知单词,但不是单词。

Google 与大多数全文搜索引擎一起,根据单词的字母顺序设置倒排索引,并提供指向其源文档的链接。二分搜索速度非常快,即使对于巨大的索引也是如此。但是在这种情况下做左截断真的很难,因为它失去了索引的优势。

请先 登录 后评论
Kev

SQL Server 中的通配符是 % 符号,它可以正常工作,可以是前导、尾随或其他。

也就是说,如果您要进行任何类型的严肃全文搜索,那么我会考虑使用全文索引功能。使用 %_ 通配符会导致您的数据库性能受到严重影响。

请先 登录 后评论
Michael Stum

前导通配符的问题:它们不能被索引,因此你要进行全表扫描。

请先 登录 后评论
Swinders

使用“%”字符,我使用以下内容搜索了我们的数据库:

SELECT name FROM TblNames WHERE name LIKE '%overflow'

使用此表单或查询有时会很慢,但我们仅将其用于偶尔的手动搜索。

请先 登录 后评论
GateKiller

% 匹配任意数量的字符 _ 匹配单个字符

我从未使用过全文索引,但您只需使用内置的 T-SQL 字符串函数即可完成相当复杂且快速的搜索查询。

请先 登录 后评论
Dave Ward

值得记住的一点是,与其他通配符用法相比,领先的通配符查询带来了显着的性能溢价。

请先 登录 后评论