2008-08-04 22 views
16

Per esempio, la mia domanda è come il seguente utilizzando SQL Server 2005:Perché l'indicizzazione completa del testo SQL non restituisce risultati per le parole che contengono #?

SELECT * FROM Table WHERE FREETEXT(SearchField, 'c#') 

Ho un indice completo definito per utilizzare la colonna Campo di ricerca che restituisce risultati quando si utilizza:

SELECT * FROM Table WHERE SearchField LIKE '%c#%' 

credo # è una lettera speciale, quindi come posso consentire a FREETEXT di funzionare correttamente per la query sopra?

+0

Solo un'ipotesi, ma che dire di "c \\ #"? –

risposta

10

Il carattere # è indicizzato come punteggiatura e pertanto ignorato, quindi sembra che rimuoveremo la lettera C dalla nostra lista di ignorazioni di indicizzazione delle parole.

Testato localmente dopo averlo fatto e ricostruito gli indici e ottengo risultati!

Guardare utilizzando un linguaggio word breaker diverso nella colonna indicizzata, in modo che quei caratteri speciali non vengano ignorati.

EDIT: ho trovato anche this information:

C# è indicizzato come c (se c non è nella vostra lista di parole non significative, vedere di più sulle liste di parole non significative successivi), ma C# è indicizzato come C# (in SQL 2005 e SQL 2000 in esecuzione su Win2003 indipendentemente dal fatto che C o c sia incluso nell'elenco delle parole non significative. Non è solo C# che viene memorizzato come C#, ma qualsiasi lettera maiuscola seguita da #. Viceversa, C++ (e qualsiasi altra lettera con lettere maiuscole seguita da a ++) viene indicizzata come c (indipendentemente dal fatto che c sia presente nell'elenco delle parole non significative).

1

Citando una pagina di aiuto tanto replicati su indicizzazione linguaggio di query del servizio:

utilizzare i caratteri appositamente trattate come &, |, ^, #, @, $, (,), in una query, racchiudi la tua query tra virgolette (").

Per quanto ne so, il servizio di indicizzazione esegue anche la ricerca di testo completo in MSSQL, quindi questo potrebbe essere di aiuto.