2009-11-06 5 views
15

Używam wyszukiwania pełnotekstowego SQL i z tego co przeczytałem, CONTAINS zwraca dopasowania w pobliżu słów, podczas gdy FREETEXT zwraca słowa, które mają podobne znaczenie, jednak nie mogę znaleźć żadnych przykładów, które potwierdzą to.Pomyślałem, czy użyć FREETEXTTABLE, czy CONTAINSTABLE

W każdym razie, do rzeczy, używam wyszukiwania pełnotekstowego na stole z polem opisu, które ma max 2500 znaków i chce używać FTS na tym. Ten opis będzie zawierał składniki, takie jak składniki żywności, co najlepiej byłoby wykorzystać, ZAWIERA lub FREETEXT? Co chcę moje użytkownikowi przeszukiwać jest somthing jak:

„przepis na ciasto cukru”

i należy go zwrócić najwyższej pozycji w rankingu wyników, co byłoby najlepsze fo odym cz? Owieku, FREETEXT lub zawiera?

Odpowiedz

18

Uważam, że FREETEXT jest tym, czego szukasz.

Tutaj jest to dobre porównanie z dwóch opcji:

http://www.sitepoint.com/blogs/2006/12/06/sql-server-full-text-search-protips-part-2-contains-vs-freetext/

Jeśli używasz zawiera WHERE okazuje się być skomplikowane, więc nie można przejść bezpośrednio co użytkownicy weszły w swoje formularz wyszukiwania:

 
WHERE CONTAINS(notes, 'FORMSOF(INFLECTIONAL, recipe) or FORMSOF(INFLECTIONAL, cuisine)') 

Ale jeśli używasz FREETEXT, bezpośrednio określenie "formularz wyszukiwania" w przypadku gdy:

 
WHERE FREETEXT(notes, 'recipe for cake sugar') 

Powiedziałbym, że ZAWIERA jest użyteczne, jeśli chcesz przeszukać coś, w którym twój program tworzy zapytanie, ponieważ jest o wiele potężniejszy i masz większą kontrolę. Z drugiej strony FREETEXT jest przydatny, gdy chcesz wykonać zapytanie "styl Google", które określa użytkownik w prostej składni (tylko słowa), czego szukać.

9

CONTAINSTABLE

http://msdn.microsoft.com/en-us/library/ms189760(v=SQL.90).aspx Zwraca tabelę zero, jeden lub więcej wierszy dla tych kolumn zawierające typy danych znakowych oparte na precyzyjne lub rozmyty (mniej dokładne) pasuje do pojedynczych słów i fraz, bliskość słów w pewnej odległości od siebie lub ważone mecze. CONTAINSTABLE można odwoływać się do klauzuli FROM instrukcji SELECT, jak gdyby była to zwykła nazwa tabeli.

Kwerendy używające CONTAINSTABLE określają zapytania pełnotekstowe typu pełnego, które zwracają wartość rankingową trafności (RANK) i klucz pełnotekstowy (KEY) dla każdego wiersza. Funkcja CONTAINSTABLE używa tych samych warunków wyszukiwania, co predykat CONTAINS.

FREETEXTTABLE

http://msdn.microsoft.com/en-us/library/ms177652(v=SQL.90).aspx Zwraca tabelę zero, jeden lub więcej wierszy dla tych kolumn zawierające typy danych znakowych opartej na wartościach pasujących znaczenie, ale nie dokładną treść, tekst w określony freetext_string. FREETEXTTABLE można odwoływać się do klauzuli FROM instrukcji SELECT, takiej jak zwykła nazwa tabeli.

Kwerendy za pomocą FREETEXTTABLE określają kwerendy pełnotekstowe typu pełnotekstowego, które zwracają wartość rankingową relewancji (RANK) i klucz pełnotekstowy (KEY) dla każdego wiersza.

Powiązane problemy