所以我在我的Django(postgres)后端查询了一个搜索端点,如下所示:
widgets = Widgets.objects.\
filter(user=request.user).\
filter(title__icontains="marketing director").\
distinct('url')[:250]
title
是一个CHAR字段(django中为models.CharField(max_length=255, blank=True)
)。
contains
这里当然相当于Postgres中的'%LIKE%'
查询。我特别想要这个(即:不是中缀'LIKE%'
搜索)。
我想加快查询速度。
似乎对postgres文本搜索的大多数优化仅适用于TEXT字段 - 有没有办法加快CHAR列上的精确字符串搜索?
我可以使用Postgres trigram索引,但实际上并不需要模糊/拼写错误类型的搜索。虽然我很乐意使用它,但实际上由于某种原因它实际上更快。
或者我会更好地将这些列转换为TEXT,使存储增加点击,并以某种方式更好地索引它们?
答案 0 :(得分:2)
仅 方式使用带有LIKE
模式的索引,该模式以%
开头(未锚定开头)是使用三元组索引。
将属性定义为character
或text
并不重要,因为无论如何它们都会转换为text
。
您的数据是否包含大量尾随空白?除此之外,我看不出text
如何浪费存储空间。