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?
risposta
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.
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
Quindi, in altre parole, se stai cercando una corrispondenza esatta con l'intera stringa, un indice FULLTEXT è la cosa sbagliata da usare? – aroth
@aroth durante la ricerca su tutto il contenuto della colonna un indice di testo completo non sarebbe affatto vantaggioso, sì. – Alex
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.
- 1. Che cos'è un MvcHtmlString e quando dovrei usarlo?
- 2. Che cos'è la delega? Quando dovrei usarlo?
- 3. polimorfico_allocatore: quando e perché dovrei usarlo?
- 4. Che cos'è pyximport e come dovrei usarlo?
- 5. Che cos'è l'NHibernate e perché dovrei usarlo?
- 6. SQL Server: indice normale rispetto all'indice di testo completo
- 7. Che cos'è __declspec e quando devo usarlo?
- 8. SignInManager, che cos'è e come, quando usarlo?
- 9. Cos'è JAXB e perché dovrei usarlo?
- 10. Cos'è Request.InputStream e quando usarlo?
- 11. Che cos'è un mock e quando dovresti usarlo?
- 12. cos'è ICustomTypeDescriptor e quando usarlo?
- 13. MySQL: (testo completo/indice) Ricerca su "colonne di una parola"
- 14. spiegazione di D_GNU_SOURCE Perché usarlo e quando?
- 15. Quando viene aggiornato l'indice di testo completo in SQL Server?
- 16. Cos'è il protocollo TDS versione 8.0 e perché dovrei usarlo?
- 17. Errore quando si utilizza un indice di testo su Mongodb
- 18. mysql - indice di testo completo - che cos'è la modalità lingua naturale
- 19. Ricerca di testo completo
- 20. Cosa fa un blocco di codice @functions in un file rasoio, e quando (se mai) dovrei usarlo?
- 21. Più colonne con ContainsTable e logica booleana con indice di testo completo
- 22. PDO e MySQL Ricerche di testo completo
- 23. @ModelAttribute annotazione, quando usarlo?
- 24. L'aggiunta di un indice di testo completo in PostgreSQL velocizzerà le mie query regolari che utilizzano LIKE?
- 25. Quale database dovrei usare per memorizzare i record e come dovrei usarlo?
- 26. Che cos'è un MQ e perché voglio usarlo?
- 27. Pool di thread Tomcat? Commentato in tomcat.conf, dovrei usarlo?
- 28. viewview android viewview. quando usarlo, e quando non su
- 29. C# Quando dovrei usare List e quando dovrei usare l'arraylist?
- 30. Quando dovrei usare async/await e quando no?
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"? –