संपादित करें:Django 1.8 postgresql बिलिन के लिए असंवेदनशील लुकअप बनाता है। https://docs.djangoproject. com/hi/dev/ref/contrib/postgres/lookups/#std:fieldlookup-unaccent
वास्तव में पोस्टग्रेज कॉन्ट्रिब (8.4+) में आसानी से खोज करने के लिए एक गैर-उच्चारण कार्य है:
पोस्टग्रेज 9/8.5 के लिए:
- https://github.com/adunstan/postgresql- dev/commits/master/contrib/unaccent
- http://www.sai.msu.su/~megera/ विकी/अस्पष्ट
पोस्टग्रेज 8.4 के लिए:
यहाँ django से उपयोग का एक उदाहरण:
vals = MyObject.objects.raw(
"SELECT * \
FROM myapp_myobject \
WHERE unaccent(name) LIKE \'%"+search_text+"%'")
तुलना करने से पहले आप टेक्स्ट-सर्च पर अस्वच्छता लागू कर सकते हैं।
मैंने जो विकल्प बनाया है वह है:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# parts of credits comes to clarisys.fr
from django.db.backends.postgresql_psycopg2.base import *
class DatabaseOperations(DatabaseOperations):
def lookup_cast(self, lookup_type):
if lookup_type in('icontains', 'istartswith'):
return "UPPER(unaccent(%s::text))"
else:
return super(DatabaseOperations, self).lookup_cast(lookup_type)
class DatabaseWrapper(DatabaseWrapper):
def __init__(self, *args, **kwargs):
super(DatabaseWrapper, self).__init__(*args, **kwargs)
self.operators['icontains'] = 'LIKE UPPER(unaccent(%s))'
self.operators['istartswith'] = 'LIKE UPPER(unaccent(%s))'
self.ops = DatabaseOperations(self)
इस फ़ाइल का उपयोग करें base.py
एक फ़ोल्डर में और इस फ़ोल्डर को डीबी बैकएंड के रूप में उपयोग करें। icontains और istartswith अब केस और एक्सेंट असंवेदनशील हैं।