2010-06-22 127 views
6

我使用SQLServer的2008年,如果我執行下面的查詢排名:FREETEXTTABLE始終爲0

SELECT 
    * 
FROM 
    FREETEXTTABLE(SomeTable, Name, 'a name that I know exists') 

我得到的行回來,我所期望的,但排名始終爲0

尋找一個解決這個問題,I found this question對微軟的ASP.NET論壇,果然如果我添加:

ALTER FULLTEXT CATALOG MyCatalog REBUILD 

我開始得到一個等級 - 但只是暫時的。

我不想在每次搜索時都重建我的目錄,特別是當我的數據庫中有大量數據時,如果直接在查詢之前將其添加到我的Sproc中,我的查詢將無法返回結果,大概是因爲該目錄已經完成重建。似乎還有其他人有這個和類似的問題,但我一直無法找到解決方案。有任何想法嗎?

回答

3

我在同一個問題上運行,並且currently accepted answer不是我的解決方案。

是的排名是按照這個答案所說的完成的,但是當它自上次目錄重建以來已經有些時間了的時候,結果並不一致。重建後的排名不會發生顯着變化,重建後甚至可能會稍微減少幾分鐘...

對我來說,freetexttable排名中存在一個錯誤。 (錯誤不影響containstable排名:我用我自己的車目錄檢查了它自己,它也寫在this Microsoft forum post。)

this other Microsoft forum post似乎只發生在具有唯一索引很少的行目錄這個bug。將數據添加到目錄會導致錯誤消失。

因此,這裏是我的答案,從Pavel Valenta on yet another Microsoft forum post採取:

如果你真正的目錄是不會有比索引幾百行較多,加上一些虛表來您的目錄,以便有索引的多行。

由於構建查詢的方式,這不會污染您的結果。是的,這似乎是一個奇怪的修復。但那是唯一爲我解決麻煩的人。

最後一個注意事項:我對sql 2005 sp4有這個問題,未在2008年進行測試。(問題是針對2008)。