ricerca con caratteri jolly su colonna (s) in una tabella di grandi dimensioni (> 10.000.000 righe) in MySQL

StackOverflow https://stackoverflow.com/questions/373017

  •  21-08-2019
  •  | 
  •  

Domanda

Quali techniqes useresti per implementare una ricerca di contenuti in una colonna su un grande tavolo in MySql? Dire per esempio che si dispone di 10.000.000 messaggi di posta elettronica memorizzati in una tabella del database e desideri implementare una ricerca soggetto, che mi permetterebbe di cercare una o più parole che era presente nella e-mail soggetto. Se l'utente ha cercato "christmas santa" si dovrebbe trovare un email con argomenti come "Babbo ci visita questo Natale" e "Natale, sarà Babbo mai mostrare".

La mia idea è quella di elaborare tutte le parole dei soggetti (striscia tutti i numeri, segni di punteggiatura, virgole, ecc) e salvare ogni parola in una tabella di indice, dove ho un indice univoco sulla colonna di parola. Poi vorrei creare un collegamento che al tavolo di posta elettronica da un tavolo molti a molti rapporti.

C'è un modo migliore per eseguire ricerche sul jolly molto grandi tavoli?

È database che supporta in modo nativo questo tipo di ricerche?

È stato utile?

Soluzione

Si potrebbe utilizzare gli indici FULLTEXT se si utilizza MyISAM come il motore di archiviazione. Tuttavia, MySQL, in generale, non è molto buona con la ricerca di testo.

Una soluzione molto migliore sarebbe quella di andare con una soluzione di indicizzazione di testo dedicato come Lucene o Sfinge . Personalmente mi consiglia Sphinx - ha una grande integrazione con PHP e MySQL ed è molto, molto veloce. (Può essere utilizzato per accelerare anche le interrogazioni ordinarie - svolge raggruppamento molto veloce e l'ordinamento)

Wikipedia ha una bella lista di diversi motori di indicizzazione -. qui

Altri suggerimenti

tabelle MyISAM MySQL supportano una FULLTEXT indice, che aiuta in questo tipo di ricerca.

Ma non è la tecnologia più rapida disponibile per questo tipo di ricerca. E non si può utilizzare su dati memorizzati in tabelle InnoDB.

Ho sentito alcune cose buone di Sfinge Cerca , ma non ho ancora utilizzato.

Ecco un altro blog su Sphinx: http://capttofu.livejournal.com/13037.html

Mentre un indice full-text MySQL è possibile, ho il sospetto vorrei guardare utilizzando qualcosa di progettato per essere un motore di ricerca come Lucene .

Questo suona come una ricerca di un testo completo, che supporta SQL Server.

Ma la tua idea è generalmente sana. Stai efficacemente calcolando un "indice" sul vostro tavolo in anticipo per velocizzare le ricerche.

Si desidera guardare la funzione di MATCH...AGAINST.

Si veda ad esempio: Utilizzando Ricerca MySQL full-text

selezionare " testo intero " in docs MySQL (per quanto ne so, tutti i DBMS attuali supportano questa)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top