Búsquedas específicas de PostgreSQL

Similitud de trigramas

trigram_similar

La búsqueda de similitud de trigramas trigram_similar permite realizar búsquedas de trigramas, midiendo el número de trigramas (tres caracteres consecutivos) compartidos, utilizando una extensión de PostgreSQL dedicada. Una búsqueda de trigramas se le da una expresión y devuelve resultados que tienen una medida de similitud mayor que la umbral de similitud actual.

Para usarla, agrega 'django.contrib.postgres' en tus INSTALLED_APPS y activa la extensión pg_trgm en PostgreSQL. Puedes instalar la extensión utilizando la operación de migración TrigramExtension.

Los textos traducidos son:

>>> City.objects.filter(name__trigram_similar="Middlesborough")
['<City: Middlesbrough>']

trigram_word_similar

La búsqueda trigram_word_similar permite realizar búsquedas de similaridad entre palabras utilizando una extensión PostgreSQL dedicada. Puede entenderse aproximadamente como medir el número mayor de trigramas compartidos entre el parámetro y cualquier subcadena del campo. Una búsqueda de palabras por trigramas se le da una expresión y devuelve resultados que tienen una medida de similaridad de palabra mayor que el umbral de similaridad actual.

Para usarla, agrega 'django.contrib.postgres' en tus INSTALLED_APPS y activa la extensión pg_trgm en PostgreSQL. Puedes instalar la extensión utilizando la operación de migración TrigramExtension.

La búsqueda trigram_word_similar se puede utilizar en CharField y TextField:

>>> Sentence.objects.filter(name__trigram_word_similar="Middlesborough")
['<Sentence: Gumby rides on the path of Middlesbrough>']

trigram_strict_word_similar

Similar a trigram_word_similar, excepto que fuerza los límites de extensión para coincidir con los límites de palabra.

Para usarla, agrega 'django.contrib.postgres' en tus INSTALLED_APPS y activa la extensión pg_trgm en PostgreSQL. Puedes instalar la extensión utilizando la operación de migración TrigramExtension.

La búsqueda trigram_strict_word_similar se puede utilizar en CharField y TextField.

Unaccent

La búsqueda unaccent permite realizar búsquedas insensibles a tildes utilizando una extensión PostgreSQL dedicada.

Esta búsqueda se implementa utilizando Transform, por lo que se puede encadenar con otras funciones de búsqueda. Para utilizarla, debes agregar 'django.contrib.postgres' en tus INSTALLED_APPS y activar la extensión unaccent en PostgreSQL. La operación de migración UnaccentExtension está disponible si deseas realizar esta activación utilizando migraciones).

La traducción de los textos es la siguiente:

>>> City.objects.filter(name__unaccent="México")
['<City: Mexico>']

>>> User.objects.filter(first_name__unaccent__startswith="Jerem")
['<User: Jeremy>', '<User: Jérémy>', '<User: Jérémie>', '<User: Jeremie>']

Advertencia

Los lookups unaccent deberían funcionar bien en la mayoría de los casos de uso. Sin embargo, las consultas que utilizan este filtro realizarán generalmente escaneos completos de tablas, lo que puede ser lento en grandes tablas. En esos casos, utilizar herramientas de indexación de texto completo dedicadas podría ser apropiado.