2016-05-09 86 views
1

我有一個在其列之一上有全文索引的表。該列中的文本可以包含換行符「\ r \ n」,例如,在MS SQL Server中執行全文搜索時忽略換行符

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?

+0

不應該全文搜索忽略默認情況下的「和,the,a等」的換行符,空白和填充詞? – Kritner

+0

不這樣工作。我解析出單詞。 – Paparazzi

+0

將「line1 line2」作爲輸入參數提供給查詢(推測爲proc)? – EastOfJupiter

回答

1

CONTAINS使用全文索引。由於這個原因,如果您在搜索之前使用函數修改字段的內容,那麼全文索引的優勢將被取消。

可以在視圖上創建全文索引。因此,我建議使用第二個字段創建一個視圖,其中包含與當前搜索字段完全相同的內容,不同之處在於您會用空格或其他無害的替換任何不需要的特殊字符。然後,您可以在視圖中的新字段上創建全文索引,並在該視圖的該字段中使用CONTAINS。

+0

謝謝。如果您在搜索之前修改該值,則說明索引的優勢無效。這可能是我上面的SQL語句不起作用的原因。我會考慮你所建議的視圖選項,或者甚至找到另一種方法來完全避免這個問題。 – Kyllan

相關問題