首页 > 解决方案 > 优化 Django 文本字段查找

问题描述

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

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')

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

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

标签: djangopostgresqldjango-models

解决方案


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

CREATE INDEX text_hash ON text_table USING hash(content);

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


推荐阅读