2012-06-08 18 views
5

Ho una tabella con un elenco di parole.mysql indicizzazione parziale, indicizzazione inversa

parola VARCHAR (16)

ho bisogno di creare un indice inverso. vale a dire. la parola "mela" indicherà "elppa", la parola "banana" come "ananab" e così via.

Inoltre, è possibile indicizzare, ad esempio, una parte della parola? Come ad esempio, saltare i primi/ultimi 1 o 2 caratteri:

pple (Apple) anana (banana)

sono queste cose possibili?

+0

Aggiungi una nuova colonna con il testo inverso e costruisci l'indice. – Scoutman

risposta

5

È possibile creare un indice su un campo che è limitato dalla lunghezza del prefisso, il che significa che verranno considerati solo i primi n caratteri, tuttavia non è possibile farlo con una posizione iniziale e finale arbitraria. Leggi di più sulla pagina di documentazione di mysql CREATE INDEX.

In questo caso, creerei solo un'altra colonna, uso la funzione REVERSE di mysql per riempirla e creare un indice su di essa, in questo modo si ottiene un campo per cercare sul retro della parola originale.

Altri database come Postgresql consentono di index an expression, che consente effettivamente di indicizzare reverse(col_name) senza creare la colonna aggiuntiva. Quindi è possibile, non solo con mysql adesso. (dalla versione 9 potgresql ha reverse() nativo credo)