SQL 喜欢 '%term%' 除了没有字母

SQL like '%term%' except without letters

我正在搜索 table 篇新闻文章。 2 个相关列是 ArticleTitleArticleText。当我想搜索特定术语的文章时,我从

开始

column LIKE '%term%'

然而,这给了我很多带有锚链接内术语的文章,例如 <a href="example.com/*term*> 可能 return 一篇不相关的文章。

然后我切换到

column LIKE '% term %'

此查询的问题是它没有找到标题或文本 began/ended 包含该术语的文章。此外,它与我想要的 term-term's 之类的内容不匹配。

看来我想要的查询应该可以做这样的事情

'%[^a-z]term[^a-z]%

这应该排除锚链接中的术语,但其他所有内容。我认为这个查询仍然排除了 begin/end 的字符串。有更好的解决方案吗? SQL-Server 的 FULL TEXT INDEXING 能解决这个问题吗?

此外,将 ArticleTitleArticleText 存储为 HTML-free 列是否是个好主意?然后我可以使用 '%term%' 而无需获取锚链接。不过,这些将是 2 个额外的列,因为最终我将需要原始的 HTML 来进行格式化。

谢谢。

SQL 并非旨在解释 HTML 字符串。因此,您只能将问题推迟到更困难的问题出现(例如,包含您的搜索词作为简单句子的一部分的评论节点)。

您仍然可以使用 FULL TEXT 作为预过滤器,然后 运行 在应用层上进行 HTML 分析以进一步过滤您的结果集。

SQL 服务器的 LIKE 允许您像您描述的那样定义类似 Regex 的模式。

更好的选择是使用 fulltext search:

WHERE CONTAINS(ArticleTitle, 'term')

正确利用索引(LIKE '%term%' 查询很慢),并在搜索算法中提供其他好处。

此外,将文章的纯文本版本与 HTML 版本一起存储,以及 运行 您的搜索查询可能会受益。