mirror of
https://github.com/django/django.git
synced 2025-10-17 13:58:24 +00:00
Fixed #24938 -- Added PostgreSQL trigram support.
This commit is contained in:
parent
d7334b405f
commit
1962a96a30
11 changed files with 184 additions and 4 deletions
53
tests/postgres_tests/test_trigram.py
Normal file
53
tests/postgres_tests/test_trigram.py
Normal file
|
@ -0,0 +1,53 @@
|
|||
from django.contrib.postgres.search import TrigramDistance, TrigramSimilarity
|
||||
from django.test import modify_settings
|
||||
|
||||
from . import PostgreSQLTestCase
|
||||
from .models import CharFieldModel, TextFieldModel
|
||||
|
||||
|
||||
@modify_settings(INSTALLED_APPS={'append': 'django.contrib.postgres'})
|
||||
class TrigramTest(PostgreSQLTestCase):
|
||||
Model = CharFieldModel
|
||||
|
||||
@classmethod
|
||||
def setUpTestData(cls):
|
||||
cls.Model.objects.bulk_create([
|
||||
cls.Model(field='Matthew'),
|
||||
cls.Model(field='Cat sat on mat.'),
|
||||
cls.Model(field='Dog sat on rug.'),
|
||||
])
|
||||
|
||||
def test_trigram_search(self):
|
||||
self.assertQuerysetEqual(
|
||||
self.Model.objects.filter(field__trigram_similar='Mathew'),
|
||||
['Matthew'],
|
||||
transform=lambda instance: instance.field,
|
||||
)
|
||||
|
||||
def test_trigram_similarity(self):
|
||||
search = 'Bat sat on cat.'
|
||||
self.assertQuerysetEqual(
|
||||
self.Model.objects.filter(
|
||||
field__trigram_similar=search,
|
||||
).annotate(similarity=TrigramSimilarity('field', search)).order_by('-similarity'),
|
||||
[('Cat sat on mat.', 0.625), ('Dog sat on rug.', 0.333333)],
|
||||
transform=lambda instance: (instance.field, instance.similarity),
|
||||
ordered=True,
|
||||
)
|
||||
|
||||
def test_trigram_similarity_alternate(self):
|
||||
self.assertQuerysetEqual(
|
||||
self.Model.objects.annotate(
|
||||
distance=TrigramDistance('field', 'Bat sat on cat.'),
|
||||
).filter(distance__lte=0.7).order_by('distance'),
|
||||
[('Cat sat on mat.', 0.375), ('Dog sat on rug.', 0.666667)],
|
||||
transform=lambda instance: (instance.field, instance.distance),
|
||||
ordered=True,
|
||||
)
|
||||
|
||||
|
||||
class TrigramTextFieldTest(TrigramTest):
|
||||
"""
|
||||
TextField has the same behavior as CharField regarding trigram lookups.
|
||||
"""
|
||||
Model = TextFieldModel
|
Loading…
Add table
Add a link
Reference in a new issue