SQL如'%term%',除了没有字母

问题描述 投票:0回答:2

我正在搜索一篇新闻报道。 2个相关专栏是ArticleTitleArticleText。当我想搜索特定术语的文章时,我开始使用

column LIKE '%term%'

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

所以我转而去了

column LIKE '% term %'

此查询的问题是它没有找到文章的标题或文本以该术语开头/结尾。它也不符合像term-term's这样的东西,我确实想要它。

似乎我想要的查询应该能够做这样的事情

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

这应该排除锚链接中的术语,但不包括其他所有内容。我认为这个查询仍然排除了以该术语开头/结尾的字符串。有更好的解决方案吗? SQL-Server的FULL TEXT INDEXING是否解决了这个问题?

另外,将ArticleTitleArticleText存储为无HTML列是一个好主意吗?然后我可以使用'%term%'而无需获得锚链接。这些将是2个额外的列,因为最终我将需要原始的HTML用于格式化目的。

谢谢。

sql sql-server tsql wildcard sql-like
2个回答
2
投票

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

更好的选择是使用fulltext search

WHERE CONTAINS(ArticleTitle, 'term')

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

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


1
投票

SQL不是为解释HTML字符串而设计的。因此,您只能推迟问题,直到更难的问题到来(例如,包含您的搜索词作为普通句子的一部分的注释节点)。

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

© www.soinside.com 2019 - 2024. All rights reserved.