2011-12-25 106 views
3

我使用全文搜索在SQL Server 2008下面的查詢中包含全文搜索不返回所有結果

select * From MyTable where contains(*, 'FLOW AND VALVE') 

返回兩行:

1. FLOW CONTROL VALVE 
2. FLOW VALVE 

但以下查詢

select * From MyTable where contains(*, '"FLOW AND VALVE"')) 

只返回一行:

1. FLOW CONTROL VALVE 

爲什麼沒有第二個查詢返回的第二行?

回答

4

如果你是SQL Server 2008上,你可以從運行

SELECT * 
FROM sys.dm_fts_parser('FLOW AND VALVE',1033,0,0) 

SELECT * 
FROM sys.dm_fts_parser('"FLOW AND VALVE"',1033,0,0) 

CONTAINS(*, 'FLOW AND VALVE')被解釋爲兩個<simple_term>搜索得到一些線索與布爾條件結合在一起。即CONTAINS(*, 'FLOW') AND CONTAINS(*, 'VALVE')

CONTAINS(*, '"FLOW AND VALVE"'))被解釋爲短語搜索,其中「And」被忽略爲噪音詞。

至於爲什麼第二個「流量控制閥」相匹配,而不是「流量閥」 From this article

雖然它忽略了禁用詞的包容,全文索引 不考慮他們的立場。

因此基本上停止詞的存在充當通配詞匹配。

+0

它似乎是噪音詞匹配任何「單」字。例如第二查詢匹配這樣的: 「流量控制閥」 但不匹配這些: 「流量閥」 「流量計調節閥」 「閥的流量」 我找不到解釋這雖然文檔什麼。 – unubar 2011-12-25 12:56:58

+0

@unubar - 搜索短語有「流」位置1「和」位置2,「閥門」的位置3.爲「和」大概是忽略它只是看起來對於具有「閥門」索引「流」的情況下, 2位以後。 – 2011-12-25 12:59:44