2012-03-23 9 views
5

Se aggiungo un indice di testo completo in PostgreSQL, le mie query LIKE e ILIKE lo useranno automaticamente?L'aggiunta di un indice di testo completo in PostgreSQL velocizzerà le mie query regolari che utilizzano LIKE?

ho bisogno per utilizzare la sintassi speciale testo completo, al fine di usufruire di un indice full-text in PostgreSQL:

SELECT title, ts_headline(body, query) AS snippet, ts_rank_cd(body_tsv, query, 32) AS rank 
    FROM blog_entry, plainto_tsquery('hello world') AS query 
    WHERE body_tsv @@ query 
    ORDER BY rank DESC; 

risposta

7

No, un indice full-text non verrà utilizzato dall'operatore LIKE .

Con PostgreSQL 9.1 è possibile creare un nuovo tipo di indice che permetterà di accelerare le operazioni LIKE, anche se il carattere jolly non è solo alla fine dell'espressione

http://www.depesz.com/2011/02/19/waiting-for-9-1-faster-likeilike/

+0

Funziona come un fascino. Grazie! –

5

Ad ampliare la risposta di ahwnn, hanno sono diversi confronti e non possono usare lo stesso indice.

La ricerca di testo completo implica sempre la tokenizzazione del testo e in genere implica l'estrazione di parole. Ciò rende difficile la ricerca di prefissi esatti e di solito impossibile ad es. abbina due spazi di fila (generalmente vengono scartati).

Si consiglia di leggere anche le varie classi di operatori di indici, in particolare text_pattern_ops e friends. Senza questo LIKE 'cab%' non può essere ottimizzato per> = 'cab' E < 'cac'.

http://www.postgresql.org/docs/9.1/static/indexes-opclass.html

Problemi correlati