SQL 喜欢 '%term%' 除了没有字母
SQL like '%term%' except without letters
我正在搜索 table 篇新闻文章。 2 个相关列是 ArticleTitle
和 ArticleText
。当我想搜索特定术语的文章时,我从
开始
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 能解决这个问题吗?
此外,将 ArticleTitle
和 ArticleText
存储为 HTML-free 列是否是个好主意?然后我可以使用 '%term%'
而无需获取锚链接。不过,这些将是 2 个额外的列,因为最终我将需要原始的 HTML 来进行格式化。
谢谢。
SQL 并非旨在解释 HTML 字符串。因此,您只能将问题推迟到更困难的问题出现(例如,包含您的搜索词作为简单句子的一部分的评论节点)。
您仍然可以使用 FULL TEXT 作为预过滤器,然后 运行 在应用层上进行 HTML 分析以进一步过滤您的结果集。
SQL 服务器的 LIKE
允许您像您描述的那样定义类似 Regex 的模式。
更好的选择是使用 fulltext search:
WHERE CONTAINS(ArticleTitle, 'term')
正确利用索引(LIKE '%term%'
查询很慢),并在搜索算法中提供其他好处。
此外,将文章的纯文本版本与 HTML 版本一起存储,以及 运行 您的搜索查询可能会受益。
我正在搜索 table 篇新闻文章。 2 个相关列是 ArticleTitle
和 ArticleText
。当我想搜索特定术语的文章时,我从
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 能解决这个问题吗?
此外,将 ArticleTitle
和 ArticleText
存储为 HTML-free 列是否是个好主意?然后我可以使用 '%term%'
而无需获取锚链接。不过,这些将是 2 个额外的列,因为最终我将需要原始的 HTML 来进行格式化。
谢谢。
SQL 并非旨在解释 HTML 字符串。因此,您只能将问题推迟到更困难的问题出现(例如,包含您的搜索词作为简单句子的一部分的评论节点)。
您仍然可以使用 FULL TEXT 作为预过滤器,然后 运行 在应用层上进行 HTML 分析以进一步过滤您的结果集。
SQL 服务器的 LIKE
允许您像您描述的那样定义类似 Regex 的模式。
更好的选择是使用 fulltext search:
WHERE CONTAINS(ArticleTitle, 'term')
正确利用索引(LIKE '%term%'
查询很慢),并在搜索算法中提供其他好处。
此外,将文章的纯文本版本与 HTML 版本一起存储,以及 运行 您的搜索查询可能会受益。