sql-server - 如何在 SQL Server 中使用前导通配符全文搜索?

标签 sql-server full-text-search

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

我现在在多个地方读到 MS SQL 不支持“前导通配符”搜索(例如使用“*overflow”来匹配“stackoverflow”)。我正在考虑使用 CLR function to add regex matching ,但我很好奇人们可能还有哪些其他解决方案。

更多信息:You can add the asterisk only at the end of the word or phrase. - 以及我的经验经验:当匹配“myvalue”时,“my*”有效,但“(星号)value”返回不匹配,当执行简单的查询时:

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

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

最佳答案

仅针对前导通配符的解决方法:

  • 将反转的文本存储在不同的字段(或物化 View 中)
  • 为此列创建全文索引
  • 查找带有 * 的反转文本

    SELECT * 
    FROM TABLENAME 
    WHERE CONTAINS(TextColumnREV, '"mrethcraes*"');
    

当然有很多缺点,只是为了快速解决...

更不用说 CONTAINSTABLE...

关于sql-server - 如何在 SQL Server 中使用前导通配符全文搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3400/

相关文章:

sql-server - 显示字符串的十六进制转储

Java REST api http方法类型来调用执行sql删除查询的存储过程

javascript - Mongoose ,nodejs,全文搜索

node.js - 用于 postgresql 全文搜索的 Sequelize 数据类型

php - 在文本中搜索预定义词

lucene - 嵌套可枚举对象(i18n)的ElasticSearch映射

sql - CHECKPOINT 的工作方式与 SQL 中的 COMMIT 相同吗?

sql-server - 如何获取 SQL Server 2005 中所有用户创建的数据库?

如果关键字存在,则 MySQL 全文排名行更高,但不是搜索词的一部分

c# - 如何在 SQL Server 中存储和检索 varbinary(max) 列