наиболее распространенные слова в массиве fileld postgres - PullRequest
0 голосов
/ 04 июля 2018

У меня есть модель с полем массива. Это поле содержит несколько слов для каждой сущности. Модель выглядит следующим образом:

class Entity(models.Model):
    words = ArrayField(
        models.CharField(max_length=255, blank=True),
        null=True,
        blank=True
    )

Я хочу собрать списки всех объектов этой модели и найти 100 наиболее распространенных слов, встречающихся в этих массивах. Есть ли способ сделать это в Postgresql, или как эффективный способ сделать это?

1 Ответ

0 голосов
/ 04 июля 2018

Если приблизительные ответы достаточно хороши, а статистика таблиц достаточно точна, вы можете использовать статистику элементов массива, собранную PostgreSQL, для решения вашей проблемы.

Предполагая, что таблица называется public.entity, а атрибут - words, этот запрос даст желаемый результат:

SELECT mce.elem
FROM pg_stats s
   CROSS JOIN LATERAL
      unnest(most_common_elems::text::text[],
             most_common_elem_freqs) mce(elem, freq)
WHERE s.schemaname = 'public'
  AND s.tablename = 'entity'
  AND s.attname = 'words'
  AND mce.elem IS NOT NULL
ORDER BY mce.freq DESC
LIMIT 100;
...