我的一個客戶端掛鉤了多列子字符串匹配。SQL Server - 多列子字符串匹配
據我所知,Contains和FreeText搜索單詞(至少在包含單詞前綴的情況下)。但是,根據我對MSDN書籍this的理解,這些或它們的變體都無法搜索子字符串。
我用LIKE相當廣泛(SELECT * FROM A,其中AB LIKE '%SUBSTR%')
樣品表答:
ID | Col1 | Col2 | Col3 |
-------------------------------------
1 | oklahoma | colorado | Utah |
2 | arkansas | colorado | oklahoma |
3 | florida | michigan | florida |
-------------------------------------
下面的代碼將會給我們行1和行2 :
select * from A where Col1 like '%klah%' or Col2 like '%klah%' or Col3 like '%klah%'
這相當醜陋,可能很慢,我只是不太喜歡它。可能是因爲我正在處理的實現有10多列需要搜索。
隨着代碼可讀性的提高,以下可能會有所改善,但就性能而言,我們仍然處於同一個球場。
select * from A where (Col1 + ' ' + Col2 + ' ' + Col3) like '%klah%'
我曾經想過簡單地增加插入,更新和刪除觸發器只需添加上述列的級聯版本到一個單獨的表陰影此表。
樣品Shadow_Table:
ID | searchtext |
---------------------------------
1 | oklahoma colorado Utah |
2 | arkansas colorado oklahoma |
3 | florida michigan florida |
---------------------------------
這將使我們能夠進行下面的查詢搜索「%klah%」
select * from Shadow_Table where searchtext like '%klah%'
我真的不喜歡要記住,這個陰影表存在,我應該在執行多列子字符串匹配時使用它,但它可能會以寫入和存儲空間爲代價產生相當快的讀取。
我的直覺告訴我,SQL Server 2008內置了一個現有的解決方案。但是,除了關於這個主題的研究論文之外,我似乎沒有找到任何其他的東西。
任何幫助,將不勝感激。
查看全文搜索(FTS) – 2010-03-12 23:29:44
我有。上面鏈接的MSDN書提示,全文搜索是一種基於詞的搜索,它還能夠使用同義詞庫來匹配接近搜索詞的單詞或表示相同內容的單詞。我解釋錯了嗎? – 2010-03-12 23:36:40