2010-05-11 72 views
6

我想實現一個全文搜索的兩列,我創建了一個視圖:VendorName,ProductName。我有全文索引等工作,但實際的查詢是什麼導致我的一些問題。如何在sql server中的多個列上實現全文搜索?

我希望用戶能夠使用一些標準的搜索約定,或或不是和()分組的條款,這是很好,但我想在兩列應用搜索,例如,如果我要運行一個查詢如:

SELECT * FROM vw_Search 
WHERE CONTAINS((VendorName, ProductName), "Apple AND iTunes") 

這似乎是將查詢到每一列單獨即對於這兩個術語檢查供應商的名稱,然後它慣於比賽,除非供應商被稱爲「蘋果的iTunes」這兩個術語檢查產品名稱。

如果我更改查詢到:

SELECT * FROM vw_Search 
WHERE CONTAINS(VendorName, "Apple OR iTunes") 
AND CONTAINS(ProductName, "Apple OR iTunes") 

那麼它的工作原理,但打破了其他的搜索查詢(如搜索只是蘋果),並從用戶編寫查詢它並沒有太大的意義,因爲他們很可能會寫入AND,但它需要一個OR才能工作。

我想要的是,如果在兩個搜索詞語之間有效,它會匹配所有名爲apple的供應商,並且產品名稱爲itunes。

我應該在連接供應商和產品字段並在該新字段上執行第一個查詢的視圖中創建一個單獨的字段,或者是否存在我遺漏的某些內容?

除此之外,誰會知道驗證查詢的現有方法?

回答

7

在較早版本的SQL Server中,查詢匹配多個列。

但是,這被認爲是bug

要跨多個列進行匹配,應該將它們連接在計算列中並在該列上創建一個索引。

+0

這似乎是不可能的與SQL Server視圖 - 我錯了嗎? (不能在具有計算列的視圖上創建非聚集索引) – 2015-11-01 06:02:29

+0

@RoyTinker:「計算列的視圖」是什麼意思? – Quassnoi 2015-11-01 19:35:28

+0

沒關係,我的評論是不正確的(即_is_可能)。通過「查看計算列」我的意思是你上面說的,假設你的意思是創建一個視圖。 – 2015-11-03 00:23:26