Django GinIndex по определенному ключу JSON

Есть решение, как создать индекс для поиска по Django JSONField

    operations = [
        migrations.RunSQL("CREATE INDEX JsonFieldNameIndex ON contracts_clause((custom_indexed_content->'name'));"),
    ]

Однако, если я пытаюсь использовать Django GinIndex, это не влияет на скорость поиска

class Clause(models.Model):
    title = models.CharField(max_length=255)
    not_indexed_content = models.JSONField(blank=True, null=True)
    manually_indexed_content = models.JSONField(blank=True, null=True)
    db_indexed_content = models.JSONField(blank=True, null=True, db_index=True)
    gin_indexed_content = models.JSONField(blank=True, null=True)

    class Meta:
        indexes = [GinIndex(fields=['gin_indexed_content'])]

Панель инструментов отладки Django запрашивает временную шкалу

SELECT ••• FROM "contracts_clause" WHERE ("contracts_clause"."not_indexed_content" -> 'name') = '"Name5628"' LIMIT 21

12.05 мс

SELECT ••• FROM "contracts_clause" WHERE ("contracts_clause"."manually_indexed_content" -> 'name') = '"Name5628"' LIMIT 21

0.49 мс

SELECT ••• FROM "contracts_clause" WHERE ("contracts_clause"."db_indexed_content" -> 'name') = '"Name5628"' LIMIT 21

9.24 мс

SELECT ••• FROM "contracts_clause" WHERE ("contracts_clause"."gin_indexed_content" -> 'name') = '"Name5628"' LIMIT 21

9.36 мс

Есть ли способ создать индекс для определенного поля JSON, используя синтаксис Django ORM, а не сырой SQL?

Вернуться на верх