【发布时间】:2016-05-09 16:25:47
【问题描述】:
我有一个表,其中一个列上有全文索引。此列中的文本可以包含换行符“\r\n”,例如
line1\r\nline2
目前我正在使用以下SQL进行搜索
SELECT * FROM SomeTable WHERE CONTAINS(TextValue, '"*line1*"')
匹配成功。但是,我的用户希望能够进入
"line1 line2"
作为搜索词也应该成功匹配。换句话说,我希望搜索忽略“\r”和“\n”。
我试过了
SELECT * FROM civ.MetadataFieldValues WHERE CONTAINS(REPLACE(REPLACE(TextValue, CHAR(13), ' '), CHAR(10), ''), '"*line1 line2*"')
但这会返回错误
Incorrect syntax near '('.
有没有办法使用 CONTAINS 来实现这一点?
【问题讨论】:
-
不应该默认全文搜索忽略换行符、空格和填充词,如“and, the, a, etc”?
-
不能那样工作。我解析单词。
-
“line1 line2”是否作为输入参数提供给查询(假定为 proc)?
-
@EastOfJupiter 是的,“line1 line2”直接来自前端用户输入的,所以是入参。虽然它不是一个过程;我正在手动生成 SQL 作为 NHibernate ICriteria 的一部分。
-
@Kritner 它确实忽略了输入中的空格。如果我在输入字符串中的 line1 和 line2 之间添加空格,那么它仍然有效。不过,对于 \n 或 \r 似乎并没有做同样的事情。
标签: tsql full-text-search newline