我試圖用基於SQL Server 2008 R2的基於關鍵字分析器的Lucene.NET索引替換基於關鍵字分析器的索引。SQL全文索引器,完全匹配和轉義
我有一個表包含我需要查詢的自定義索引字段。索引列的值(見下文)是一系列.NET類型的自定義索引字段的名稱/值對的組合 - 實際值在運行時從屬性拉取,因爲結構未知。
我需要能夠使用AND和OR搜索集名稱和值對,並返回查詢匹配的行。
Id Index
====================================================================
1 [Descriptor.Type]=[5][Descriptor.Url]=[/]
2 [Descriptor.Type]=[23][Descriptor.Url]=[/test]
3 [Descriptor.Type]=[25][Descriptor.Alternative]=[hello]
4 [Descriptor.Type]=[26][Descriptor.Alternative]=[hello][Descriptor.FriendlyName]=[this is a test]
一個簡單的查詢,如下所示:
select * from Indices where contains ([Index], '[Descriptor.Url]=[/]');
該查詢將在下面的錯誤結果:
Msg 7630, Level 15, State 2, Line 1
Syntax error near '[' in the full-text search condition '[Descriptor.Url]=[/]'.
考慮到這一點
所以,我在Index
改變了數據使用|
而不是[
和]
:
select * from Indices where contains ([Index], '|Descriptor.Url|=|/|');
,而查詢現在是有效的,當我運行它含有Descriptor.Url
與/
開始返回,而不是記錄(只有一個在這種情況下)完全匹配的所有行。
我的問題是,我怎麼能逃避查詢佔[
和]
並確保返回只是確切匹配行?
一個更復雜的查詢看起來有點像這樣:
select * from Indices where contains ([Index], '[Descriptor.Type]=[12] AND ([Descriptor.Url]=[/] OR [Descriptor.Url]=[/test])');
感謝,
基隆
我已經嘗試過,但我最大的擔心是返回不正確的結果。謝謝。 – Kieron 2011-02-09 20:13:37