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?