Usando la sostituzione per ottenere risultati possibili per poi cercare attraverso la quantità enorme di dati

1

Ho una tabella di database contenente 40 milioni di record (tabella A).

Ogni record ha una stringa che un utente può cercare.

Ho anche una tabella con un elenco di sostituzioni di caratteri (tabella B), cioè i = Y, I = 1 ecc.

Devo essere in grado di prendere la stringa che un utente sta cercando, iterare attraverso ogni lettera e creare una matrice di ogni risultato possibile (la stringa dell'utente, quindi ogni risultato con lettere alternative usate).

Ho bisogno di verificare le alternative su entrambe le lettere maiuscole e minuscole nella parola

Una stringa di ricerca non può essere più lunga di 10 caratteri.

Sto usando PHP e un database MySQL.

Qualcuno ha pensieri / articoli / indicazioni su come farlo in modo efficiente?

    
posta Samuel Cambridge 17.08.2012 - 11:10
fonte

2 risposte

1

I have a database table holding 40 million records (table A).

Sembra che un RDBMS sia non appropriato per questa attività.

Come dice @Jim Arnold, dovresti utilizzare Lucene o Endeca per questa attività.

    
risposta data 16.10.2012 - 18:30
fonte
0

Ecco ciò che vedo possibile in base alla mia comprensione:

Un modo è creare una colonna (preferibilmente sulla tabella A) e avere un trigger del database (o scrivere codice nella tua lingua) in modo tale che ogni volta che una riga viene inserita o aggiornata, una nuova colonna (mostrata sotto come "SearchColumn") si popolerebbe con SOLO UN FORMATO STANDARD del valore di stringa. Nell'esempio di colpo ho scelto in modo arbitrario maiuscole.

La colonna di ricerca deve avere un indice non univoco.

Quando l'utente esegue una ricerca per dire "sì", devi:

SELEZIONA DA myTable WHERE SearchColumn="YES" (vedi l'ultimo paragrafo relativo alla sensibilità dei casi indice).

myTable includerebbe le seguenti colonne (tra le altre ovviamente):

OriginalColumn, SearchColumn

SÌ, SÌ

Y3S, YES

Y55, YSS

sì, SÌ

NO, NO

N0, NO

...

In questo modo, non è necessario eseguire la ricerca di righe non indicizzate. Questo metodo, poiché utilizza un indice, sarà molto veloce. Il sovraccarico di elaborazione della colonna aggiuntiva non dovrebbe essere significativo, a meno che non si abbiano migliaia di inserimenti / aggiornamenti simultanei.

In MySQL (e in qualche altro database), puoi controllare se un indice usa la distinzione tra maiuscole e minuscole o meno tramite la definizione delle proprietà di confronto delle colonne.

    
risposta data 17.08.2012 - 15:47
fonte

Leggi altre domande sui tag