Cadenas UTF-8 similares para autocompletar el campo

Fondo

Los usuarios pueden escribir un nombre y el sistema debe coincidir con el texto, incluso si la entrada del usuario o el campo de la base de datos contienen caracteres acentuados (UTF-8). Esto está usando elpg_trgm módulo.

Problema

El código se parece a lo siguiente:

<code>  SELECT
    t.label
  FROM
    the_table t
  WHERE
    label % 'fil'
  ORDER BY
    similarity( t.label, 'fil' ) DESC
</code>

Cuando el usuario escribefil, la consulta coincidefilbert pero nofilé powder. (¿Por el carácter acentuado?)

Solución fallida # 1

Traté de implementar unno acento Funciona y reescribe la consulta como:

<code>  SELECT
    t.label
  FROM
    the_table t
  WHERE
    unaccent( label ) % unaccent( 'fil' )
  ORDER BY
    similarity( unaccent( t.label ), unaccent( 'fil' ) ) DESC
</code>

Esto devuelve solamentefilbert.

Solución fallida # 2

Como se sugiere:

<code>CREATE EXTENSION pg_trgm;
CREATE EXTENSION unaccent;

CREATE OR REPLACE FUNCTION unaccent_text(text)
  RETURNS text AS
$BODY$
  SELECT unaccent($1); 
$BODY$
  LANGUAGE sql IMMUTABLE
  COST 1;
</code>

Todos los demás índices en la tabla han sido eliminados. Entonces:

<code>CREATE INDEX label_unaccent_idx 
ON the_table( lower( unaccent_text( label ) ) );
</code>

Esto devuelve solo un resultado:

<code>  SELECT
    t.label
  FROM
    the_table t
  WHERE
    label % 'fil'
  ORDER BY
    similarity( t.label, 'fil' ) DESC
</code>
Pregunta

¿Cuál es la mejor manera de volver a escribir la consulta para garantizar que se devuelvan ambos resultados?

¡Gracias!

Relacionado

http://wiki.postgresql.org/wiki/What%27s_new_in_PostgreSQL_9.0#Unaccent_filtering_dictionary

http://postgresql.1045698.n5.nabble.com/index-refuses-to-build-td5108810.html

Respuestas a la pregunta(2)

Su respuesta a la pregunta