mirror of
				https://github.com/django/django.git
				synced 2025-11-04 13:39:16 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			60 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
===========================
 | 
						|
PostgreSQL specific lookups
 | 
						|
===========================
 | 
						|
 | 
						|
Trigram similarity
 | 
						|
==================
 | 
						|
 | 
						|
.. fieldlookup:: trigram_similar
 | 
						|
 | 
						|
The ``trigram_similar`` lookup allows you to perform trigram lookups,
 | 
						|
measuring the number of trigrams (three consecutive characters) shared, using a
 | 
						|
dedicated PostgreSQL extension. A trigram lookup is given an expression and
 | 
						|
returns results that have a similarity measurement greater than the current
 | 
						|
similarity threshold.
 | 
						|
 | 
						|
To use it, add ``'django.contrib.postgres'`` in your :setting:`INSTALLED_APPS`
 | 
						|
and activate the `pg_trgm extension
 | 
						|
<https://www.postgresql.org/docs/current/pgtrgm.html>`_ on PostgreSQL. You can
 | 
						|
install the extension using the
 | 
						|
:class:`~django.contrib.postgres.operations.TrigramExtension` migration
 | 
						|
operation.
 | 
						|
 | 
						|
The ``trigram_similar`` lookup can be used on
 | 
						|
:class:`~django.db.models.CharField` and :class:`~django.db.models.TextField`::
 | 
						|
 | 
						|
    >>> City.objects.filter(name__trigram_similar="Middlesborough")
 | 
						|
    ['<City: Middlesbrough>']
 | 
						|
 | 
						|
``Unaccent``
 | 
						|
============
 | 
						|
 | 
						|
.. fieldlookup:: unaccent
 | 
						|
 | 
						|
The ``unaccent`` lookup allows you to perform accent-insensitive lookups using
 | 
						|
a dedicated PostgreSQL extension.
 | 
						|
 | 
						|
This lookup is implemented using :class:`~django.db.models.Transform`, so it
 | 
						|
can be chained with other lookup functions. To use it, you need to add
 | 
						|
``'django.contrib.postgres'`` in your :setting:`INSTALLED_APPS` and activate
 | 
						|
the `unaccent extension on PostgreSQL`_. The
 | 
						|
:class:`~django.contrib.postgres.operations.UnaccentExtension` migration
 | 
						|
operation is available if you want to perform this activation using migrations).
 | 
						|
 | 
						|
.. _unaccent extension on PostgreSQL: https://www.postgresql.org/docs/current/unaccent.html
 | 
						|
 | 
						|
The ``unaccent`` lookup can be used on
 | 
						|
:class:`~django.db.models.CharField` and :class:`~django.db.models.TextField`::
 | 
						|
 | 
						|
    >>> 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>']
 | 
						|
 | 
						|
.. warning::
 | 
						|
 | 
						|
    ``unaccent`` lookups should perform fine in most use cases. However, queries
 | 
						|
    using this filter will generally perform full table scans, which can be slow
 | 
						|
    on large tables. In those cases, using dedicated full text indexing tools
 | 
						|
    might be appropriate.
 |