2010-06-22 14 views
6

używam SQLServer 2008 i gdybym wykonać następujące zapytanie:FREETEXTTABLE zawsze ma rangę 0

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

dostaję wiersze z powrotem, że bym się spodziewał, ale ranga jest zawsze 0.

Poszukiwanie rozwiązania tego problemu, I found this question na forum Microsoft ASP.NET, i na pewno wystarczy, jeśli dodam:

ALTER FULLTEXT CATALOG MyCatalog REBUILD 

zacznę uzyskać rangę - ale tylko chwilowo.

Nie chcę odbudowywać katalogu za każdym razem, gdy robię wyszukiwanie, szczególnie gdy mam dużo danych w bazie danych i jeśli dodaję go do mojego Sproc bezpośrednio przed zapytaniem, moje zapytanie i tak nie zwraca żadnych wyników , prawdopodobnie dlatego, że katalog został przebudowany. Wydaje się, że inni ludzie mają takie i podobne problemy, ale nie byłem w stanie znaleźć rozwiązania. Jakieś pomysły?

Odpowiedz

3

Używam tego samego numeru, a currently accepted answer nie jest rozwiązaniem dla mnie.

Tak, ranking jest przeprowadzany zgodnie z tą odpowiedzią, ale nie jest to żadna przyczyna niespójnych wyników, gdy od czasu ostatniej odbudowy katalogu jest kilka razy. Ranking nie powinien się drastycznie zmieniać po przebudowie, a jeszcze mniej minut po odbudowie ...

Dla mnie istnieje błąd w rankingu freetexttable. (Bug, który nie wpływa containstable rankingu: Sprawdziłem to sam z własnego katalogu buggy, i to jest również napisane na this Microsoft forum post.)

Od this other Microsoft forum post wydaje się ten błąd występuje tylko w katalog mający tylko nieliczne wiersze indeksowane. Dodanie danych do katalogu powoduje, że błąd zniknie.

Więc tutaj jest moja odpowiedź, zaczerpnięte z Pavel Valenta on yet another Microsoft forum post:

Jeśli prawdziwy katalog nie będzie miał więcej niż kilkaset wierszy indeksowanych, dodać trochę obojętne tabelę do sklepu, aby mieć więcej wierszy indeksowane.

Nie spowoduje to zanieczyszczenia wyników z powodu sposobu budowania zapytań. Tak, wydaje się to dość dziwna poprawka. Ale to jedyny, który rozwiązał dla mnie kłopot.

Ostatnia uwaga: Miałem ten problem z sql 2005 sp4, nie testowany w 2008 roku. (Pytanie dotyczy roku 2008.)

Powiązane problemy