2009-11-06 11 views
15

Quindi sto usando SQL Ricerca full-text e da ciò che ho letto, CONTAINS restituisce corrispondenze vicino alle parole, mentre FREETEXT restituisce parole che hanno un significato simile, tuttavia non riesco a trovare alcun esempio che convalidi Questo.Confuso se usare FREETEXTTABLE o CONTAINSTABLE

Ad ogni modo, al punto, sto utilizzando la ricerca di testo completo su una tabella con un campo di descrizione che ha una lunghezza massima di 2500 caratteri e che desidera utilizzare FTS su questo. Questa descrizione conterrà cose come ingredienti per il cibo, quale sarebbe il migliore da usare, CONTAINS o FREETEXT? Quello che voglio il mio all'utente di cercare è somthing come:

"ricetta per lo zucchero torta"

e deve restituire i primi risultati ordinati, che cosa sarebbe meglio fo rthis, FREETEXT o contiene?

risposta

18

Penso che FREETEXT sia quello che stai cercando.

Qui è un buon confronto delle due opzioni:

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

Se si utilizza contiene, WHERE risulta essere complessa, quindi non è possibile passare direttamente ciò che gli utenti sono entrati nella vostra modulo di ricerca:

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

Ma, se si utilizza FREETEXT, si specifica direttamente il "modulo di ricerca" nel quale:

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

Direi CONTAINS è utile se si desidera cercare qualcosa in cui il programma costruisce la query perché è molto più potente e si ha un maggiore controllo. D'altra parte, FREETEXT è utile quando vuoi fare una query "stile google" che è il tuo utente specifica in una semplice sintassi (solo le parole) che cosa cercare.

9

CONTAINSTABLE

http://msdn.microsoft.com/en-us/library/ms189760(v=SQL.90).aspx restituisce una tabella di zero, uno, o più righe per le colonne contenenti tipi di dati basati su caratteri per preciso o sfocate (meno precisa) corrisponde alle singole parole e frasi, la vicinanza di parole a una certa distanza l'uno dall'altro, o partite ponderate. È possibile fare riferimento a CONTAINSTABLE nella clausola FROM di un'istruzione SELECT come se fosse un nome di tabella normale.

Le query che utilizzano CONTAINSTABLE specificano query full-text di tipo contiene che restituiscono un valore di rango di pertinenza (RANK) e una chiave di testo completo (KEY) per ogni riga. La funzione CONTAINSTABLE utilizza le stesse condizioni di ricerca del predicato CONTAINS.

FREETEXTTABLE

http://msdn.microsoft.com/en-us/library/ms177652(v=SQL.90).aspx restituisce una tabella di zero, uno, o più righe per le colonne contenenti tipi di dati basati su caratteri per i valori che corrispondono al significato, ma non il testo esatto, del testo nella specificato freetext_string. FREETEXTTABLE può essere fatto riferimento nella clausola FROM di un'istruzione SELECT come un normale nome di tabella.

Le query che utilizzano FREETEXTTABLE specificano query full-text di tipo libero che restituiscono un valore di rango di pertinenza (RANK) e una chiave di testo completo (KEY) per ogni riga.