我想使用ASCII搜索关键字搜索包含非ASCII字符的文本,以便' t '匹配'ṭ'。
例如,在字段Book
中给出一个带有梵语标题'Aṣṭasāhasrikā-prajñāpāramitā-sūtra'的title
对象,我希望以下查询返回它:< / p>
Book.objects.filter(title__icontains='prajna')
答案 0 :(得分:2)
一种可能性是在ascii_title
对象中创建另一个字段Book
,并且(a)保存标题的副本,其中自动删除变音符号,(b)仅使用{{1}在搜索过程中,首先从搜索关键字中删除变音符号:
ascii_title
您可以从django.utils.text.slugify()
implementation找到class Book(models.Model):
def save(self, *args, **kwargs):
self.ascii_title = remove_diacritics(self.title)
super().save(*args, **kwargs)
Book.objects.filter(ascii_title__icontains=remove_diacritics('prajñā'))
的灵感:
remove_diacritics()
如果您正在使用PostgreSQL,还有另一种可能性 - 使用import unicodedata
def remove_diacritics(value):
return unicodedata.normalize('NFKD', value).encode('ascii', 'ignore').decode('ascii')
解释here:
UNACCENT