Perché l'indicizzazione del testo completo SQL non restituisce risultati per le parole contenenti #?
-
08-06-2019 - |
Domanda
Ad esempio, la mia query è simile alla seguente utilizzando SQL Server 2005:
SELECT * FROM Table WHERE FREETEXT(SearchField, 'c#')
Ho un indice di testo completo definito per utilizzare la colonna SearchField che restituisce risultati quando si utilizza:
SELECT * FROM Table WHERE SearchField LIKE '%c#%'
Credo che # sia una lettera speciale, quindi come posso consentire a FREETEXT di funzionare correttamente per la query sopra?
Soluzione
Il carattere # è indicizzato come punteggiatura e quindi ignorato, quindi sembra che rimuoveremo la lettera C dalle nostre liste di indicizzazione delle parole da ignorare.
L'ho testato localmente dopo averlo fatto e aver ricostruito gli indici e ho ottenuto risultati!
Cercando di utilizzare un linguaggio diverso per il word breaker nella colonna indicizzata, in modo che quei caratteri speciali non vengano ignorati.
MODIFICARE:Ho anche trovato questa informazione:
c# è indicizzato come c (se c non è nell'elenco delle parole non significative, vedere di più sugli elenchi delle parole non significative più avanti), ma C# è indicizzato come C# (in SQL 2005 e SQL 2000 in esecuzione su Win2003 indipendentemente dal fatto che C o c sia nel tuo elenco delle parole non significative elenco di parole).Non solo C# viene archiviato come C#, ma qualsiasi lettera maiuscola seguita da #.Al contrario, c++ (e qualsiasi altra lettera minuscola seguita da a++) viene indicizzata come c (indipendentemente dal fatto che c sia nell'elenco delle parole non significative).
Altri suggerimenti
Citando una pagina di aiuto molto replicata sul linguaggio di query del servizio di indicizzazione:
Per utilizzare caratteri trattati in modo speciale come &, |, ^, #, @, $, (, ), in una query, racchiudere la query tra virgolette (“).
Per quanto ne so, ricerca nel testo completo in MSSQL
viene eseguito anche dal servizio di indicizzazione, quindi questo potrebbe essere d'aiuto.