postgres manager for crack convertir sql postgresql full-text-search full-text-indexing

manager - Postgresql prefijo comodín para texto completo



ems sql manager for postgresql ubuntu (2)

La búsqueda de texto completo es buena para encontrar palabras, no subcadenas.

Para las búsquedas de subcadenas, es mejor usarlas like ''%don%'' con la extensión pg_trgm disponible en PostgreSQL 9.1 y using gin (column_name gin_trgm_ops) o using gist (column_name gist_trgm_ops) . Pero su índice sería muy grande (incluso varias veces más grande que su tabla) y el rendimiento de escritura no es muy bueno.

Hay un muy buen ejemplo del uso de pg_trgm para la búsqueda de subcadenas en select * from depesz blog .

Estoy tratando de ejecutar una consulta de texto completo usando Postgresql que puede atender coincidencias parciales usando comodines.

Parece bastante fácil tener un comodín postfix después del término de búsqueda, sin embargo, no puedo averiguar cómo especificar un comodín de prefijo.

Por ejemplo, puedo realizar una búsqueda de postfix fácilmente usando algo como ...

SELECT "t1".* FROM "t1" WHERE (to_tsvector(''simple'', "t1"."city") @@ to_tsquery(''simple'', ''don:*'') )

debe devolver los resultados que coincidan con "Londres"

Sin embargo, no puedo hacer una búsqueda de prefijo como ...

SELECT "t1".* FROM "t1" WHERE (to_tsvector(''simple'', "t1"."city") @@ to_tsquery(''simple'', '':*don'') )

Idealmente, me gustaría tener un comodín con un prefijo al principio y al final del término de búsqueda, algo como ...

SELECT "t1".* FROM "t1" WHERE (to_tsvector(''simple'', "t1"."city") @@ to_tsquery(''simple'', '':*don:*'') )

Puedo usar una condición LIKE, sin embargo, esperaba beneficiarme del rendimiento de las funciones de búsqueda de texto completo en Postgres.


Una forma salvaje y loca de hacerlo sería crear un índice tsvector de todos sus documentos, invertido. E invierta sus consultas para la búsqueda postfix también.

Esto es esencialmente lo que hace Solr con su ReversedWildcardFilterFactory

select reverse(''brown fox'')::tsvector @@ (reverse(''rown'') || '':*'')::tsquery --true