优化Django文本字段查找

时间:2018-07-28 08:08:20

标签: django postgresql django-models

我有一个用于存储文本对象的简单模型:

class Text(models.Model):
    content = models.TextField()

我需要content字段唯一。因此,我在其上创建了一个自定义的唯一索引:

CREATE UNIQUE INDEX text_md5 ON text_table (md5(content));

现在,我查询选择特定的行:

Text.objects.get(content='sample text.')
Text.objects.filter(content__in=['text1', 'text2'])

而且它非常慢。我希望postgres使用其内容md5查找文本对象。在Django中最优雅的方法是什么。

此外,我想使用contains查询的LIKE过滤器查询此字段:​​

Text.objects.get(content__contains='text')

用于优化这些查询的最佳索引解决方案是什么?

我知道全文搜索是另一种选择。但是,我不需要复杂的搜索功能。

1 个答案:

答案 0 :(得分:0)

Postgres 10 hash index使文本查询变得非常快。所以,我添加了这个简单的索引:

CREATE INDEX text_hash ON text_table USING hash(content);

此索引优化了文本选择查询,而我的python代码没有任何变化。