2013-07-17 85 views
2

我試圖找出爲什麼這些2條語句的行爲不同SQL全文搜索包含命令

 
SELECT DISTINCT FIELD1, FIELD2 
FROM SomeTable 
WHERE CONTAINS(*,'WORD1') AND CONTAINS(*,'WORD2*') AND CONTAINS(*,'WORD3') 
 
SELECT DISTINCT FIELD1, FIELD2 
FROM SomeTable 
WHERE CONTAINS(*,'"WORD1" AND "WORD2*" AND "WORD3"') 

我指定了我的全文檢索那麼,爲什麼第二個命令任何回報所有索引字段但第一個命令返回預期的結果?我想在一個CONTAINS語句中搜索所有字段中的所有字段都有WORD1和WORD2和WORD3的字段。

回答

1

我以前遇到這個問題,它是由設計。看到這個MS支持article

假設您有兩列c1和c2。查詢您列出

CONTAINS(*,'"WORD1" AND "WORD2*" AND "WORD3"') 

被interperted爲

CONTAINS(c1,'"WORD1" AND "WORD2*" AND "WORD3"') or CONTAINS(c2,'"WORD1" AND "WORD2*" AND "WORD3"') 

所以每一個字必須在其中任何一列(C1或C2)。如果WORD1位於c1且WORD3位於c2,則不會返回結果。

你的第一個查詢的工作,因爲它是作爲interperted

(CONTAINS(c1,'WORD1') OR CONTAINS(c2,'WORD1')) AND (CONTAINS(c1,'WORD2*') OR CONTAINS(c2,'WORD2*')) AND (CONTAINS(c1,'WORD3') OR CONTAINS(c2,'WORD3')) 
在此

(第一種情況)不同的話,只要在列中的至少一個存在的每一個字在不同的列中存在即可。

+0

這就是它,現在我想知道如果沒有動態SQL我會怎麼做。我會有不同數量的單詞。我的部分解決方案是我繼續前進,並將這些字段連接起來並建立索引,現在我的搜索按預期工作,但由於它全部是一個字段,因此我失去了使用排名或進一步優化任何內容的能力。 – Jeff

0

看起來你的第二條語句是搜索整個字符串<「WORD1」和「WORD2 *」和「WORD3」>。這就是爲什麼它沒有返回結果。另外,正如所寫的,第一個也會用雙引號搜索<「WORD1」>。是否返回<「WORD1」>的結果?

+0

從等式中取出DOUBLE引號,它仍然不起作用。我所說的是這樣不支持CONTAINS子句中的MULTIPLE FIELDS。 – Jeff