【发布时间】:2019-07-16 09:04:34
【问题描述】:
我正在使用一个简单的模型,该模型具有一个属性,该属性将该对象的所有数据存储在 JSONField 中。将其视为将 NoSQL 数据传输到我的 PostgreSQL 数据库的一种方式。有点像这样:
from django.contrib.postgres.fields import JSONField
class Document(models.Model):
content = JSONField()
每个Document 对象在其content 字段中(或多或少)具有相同的键,因此我使用这些键查询和排序这些文档。对于查询和排序,我使用的是 Django 的 annotate() 函数。我最近遇到了这个:
https://docs.djangoproject.com/en/2.1/ref/contrib/postgres/indexes/
我也知道 PostgreSQL 使用 JSONB,这显然是可索引的。所以我的问题是:我可以索引我的content 字段以使我的读取操作更快地处理复杂的查询吗?如果是这样,那我该怎么做?我链接的文档页面没有示例。
【问题讨论】:
-
我认为有与此相关的类似问题 - stackoverflow.com/a/49358119/4116955 和 stackoverflow.com/questions/17807030/… 请使用其 JSONB 类型将您的 json 数据迁移到 postgresql 表,然后尝试索引整个列或特定字段json 有效负载。
-
这很有趣。但是,我正在寻找一种在 Django 中执行此操作的方法,因为这将使我的代码库更易于管理。
-
这样的东西应该可以工作 -
class Doc(models.Model): data = JSONField() class Meta: indexes = [ GinIndex( fields=['data'], name='data_gin', ), ]抱歉格式错误。 -
这不会索引整个列吗?考虑到 JSONField 中可能存在各种数据类型,这是一个好主意吗?
-
我认为当您查询表中 JSONB 字段中的键映射到特定值的行时,此索引将起作用
标签: django postgresql