首页 > 解决方案 > 如何使用 django 加快 PostgreSQL 数据库中的正则表达式查询

问题描述

我正在尝试为我的 PostgreSQL 数据库创建正则表达式查询。我已经这样做了,但问题是使用正则表达式的查询比我按名称搜索的查询慢 3 倍。有什么方法可以加速正则表达式查询或任何其他选项来更快地获得结果?我使用 django 创建对数据库的查询。

我按品牌和型号搜索汽车的“正常”查询:

object_db = Car.objects.filter(brand='Ford', car_model='Focus-RS')

我创建这样的正则表达式查询:

object_db = Car.objects.filter(brand__regex=r'^Ford$', car_model__regex='^Focus[-_]*RS$')

我的模型:

class Car(models.Model):
    car_data = models.ForeginKey(CarData, on_delete=models.CASCADE)
    brand = models.CharField(max_length=100)
    car_model = models.CharField(max_length=100)

    class Meta:
         index_together = (
             ('brand', 'car_model')
         ) 

我得到了我想要的结果,但需要很长时间才能得到它。如何提高正则表达式查询的速度,或者是否有任何其他方法可以获得相同的结果?

标签: pythonregexdjangopostgresql

解决方案


您可以使用iexact和组合查询Q

object_db = Car.objects.filter(
    brand__iexact="ford", 
    Q(car_model__iexact="focus-rs") | Q(car_model__iexact="focus_rs"))

这将匹配不区分大小写并对该car_model字段执行“或”查询。


推荐阅读