2010-09-05 25 views
19

Come afferma il titolo, che cos'è un indice di testo completo e quando dovrei usarlo?Che cos'è un indice di testo completo e quando dovrei usarlo?

+1

Si prega di riformulare la domanda. Cosa vuoi sapere? Cosa intendi con "quando utilizzare un indice di fulltext" - a prescindere dall'ovvia risposta "quando intendi fare una ricerca a testo completo"? –

risposta

13

Negli indici di database vengono in genere utilizzati per migliorare le prestazioni quando si cerca qualcosa definito nella clausola where. Tuttavia, quando si tratta di filtrare del testo, ad es. utilizzando qualcosa come WHERE TextColumn LIKE '%searchstring%' le ricerche sono lente, perché il modo in cui funzionano gli indici di database regolari sono ottimizzati per le corrispondenze con "l'intero contenuto" di una colonna e non solo una parte di esso. Nello specifico la ricerca LIKE che include i caratteri jolly non può fare uso di alcun tipo di indice.

Come menzionato nel commento di seguito, MySQL necessita della sintassi MATCH() ... AGAINST per cercare all'interno di un indice di testo completo; BTW varia a seconda del fornitore del database. In MS SQL puoi usare CONTAINS quindi tienilo a mente quando pensi di supportare anche altri database.

Gli indici di testo completo funzionano meglio per il testo normale, poiché sono ottimizzati per questo tipo di colonne. Molto semplificate: dividono il testo in parole e creano un indice sulle parole e non sull'intero testo. Funziona molto più velocemente per le ricerche di testo quando cerchi parole specifiche.

+6

Gli indici FULLTEXT non faranno nulla per le clausole LIKE - saranno usati solo per le clausole 'MATCH() ... AGAINST'. Le clausole LIKE che iniziano con un carattere jolly '%' non possono essere accelerate in modo efficace da * qualsiasi * tipo di indice e saranno sempre lente. Per questo motivo, questo tipo di clausola LIKE dovrebbe essere evitato a meno che non si filtri un numero già piccolo di record. – thomasrutter

+2

Quindi, in altre parole, se stai cercando una corrispondenza esatta con l'intera stringa, un indice FULLTEXT è la cosa sbagliata da usare? – aroth

+1

@aroth durante la ricerca su tutto il contenuto della colonna un indice di testo completo non sarebbe affatto vantaggioso, sì. – Alex

10

Un indice di testo completo è un indice applicato in un database MySQL ai campi di testo su cui si intende eseguire una ricerca di testo completo. Una ricerca a testo integrale utilizza la sintassi match(field) against('text'). Se vuoi eseguire una ricerca full-text devi avere un indice di testo completo sulle colonne su cui lo eseguirai.

Esistono tre tipi di ricerche di testo completo. Cito il manuale, perché penso che dice meglio:

  • Una ricerca booleana interpreta la stringa di ricerca utilizzando le regole di uno speciale linguaggio di query . La stringa contiene le parole da cercare. È possibile che contenga gli operatori che specificano requisiti tali che una parola deve essere presente o assente in corrispondenza delle righe o che deve essere ponderata più alta o più bassa del solito. Comune parole come "alcuni" o "quindi" sono stopwords e non corrispondono se presente nella stringa di ricerca. Il modificatore di modalità IN BOOLEAN specifica una ricerca booleana . Per ulteriori informazioni, vedere Sezione 11.9.2, "Ricerche full-text booleane ".

  • Una ricerca in linguaggio naturale interpreta la stringa di ricerca come una frase in linguaggio naturale umano (una frase in testo libero). Non ci sono operatori speciali . Si applica l'elenco delle parole chiave . Inoltre, le parole che sono presenti nel 50% o più delle righe sono considerate comuni e non corrispondono. Le ricerche full-text sono naturali ricerche di lingua se nessun modificatore è dato .

  • Una ricerca di espansione di query è una modifica di una ricerca di lingua naturale . La stringa di ricerca viene utilizzata per eseguire una ricerca della lingua naturale. Quindi le parole delle righe più rilevanti restituite dalla ricerca vengono aggiunte a la stringa di ricerca e la ricerca è eseguita di nuovo. La query restituisce le righe dalla seconda ricerca. Il modificatore ESPANSIONE WITH QUERY specifica una ricerca di espansione . Per ulteriori informazioni su , vedere Sezione 11.9.3, "Ricerche di testo completo con query Espansione".

Per maggiori informazioni date un'occhiata al Full Text Search Reference Page.

Problemi correlati