dsw*_*tik 3 sql t-sql sql-server full-text-search
我的 SQL Server 2008 全文搜索有问题 我有以下查询
SELECT *
FROM cigars
WHERE CONTAINS(cigars.*, @Search )
Run Code Online (Sandbox Code Playgroud)
@Search 是通过存储过程传入的值。但是,这不是问题。
如果有人搜索说“Punch”,效果很好,我会得到所有匹配的雪茄。
问题在于,如果他们搜索“Punch Cigar”,我会收到此错误。
全文搜索条件“Punch Cigar”中“Cigar”附近存在语法错误。
知道如何让它搜索该短语吗?
为什么要按CIGAR表中的所有列进行搜索?当然,其中一些不使用基于字符串/文本的数据类型......
查看 CONTAINS 文档后,我会查看一个函数来正确转义 FTS 搜索的单词:
CREATE FUNCTION [dbo].[escapeFTSSearch] (
@SearchParameter NVARCHAR(MAX)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
-- Declare the return variable here
DECLARE @result NVARCHAR(MAX)
SELECT @result = '"'+ REPLACE(REPLACE(@SearchParameter,'"',''), ' ', '" AND "') +'"'
-- Return the result of the function
RETURN @result
END
Run Code Online (Sandbox Code Playgroud)
SELECT [example].[dbo].[escapeFTSSearch] ('Punch Cigar')
Run Code Online (Sandbox Code Playgroud)
...这给了我:
"Punch" AND "Cigar"
Run Code Online (Sandbox Code Playgroud)
WHERE CONTAINS(cigars.*, dbo.escapeFTSSearch(@Search) )
Run Code Online (Sandbox Code Playgroud)
该函数很简单:
根据需要进行调整。
| 归档时间: |
|
| 查看次数: |
8877 次 |
| 最近记录: |