数组文件中最常见的单词

时间:2018-07-04 06:43:32

标签: python django postgresql counter aggregate-functions

我有一个带有数组字段的模型。该字段包含每个实体的一些单词。型号如下:

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

我想累积该模型所有对象的列表,并找到100个最常见的单词出现在这些数组中。在Postgresql中有什么方法可以做到这一点,或者有效的方法是什么?

1 个答案:

答案 0 :(得分:1)

如果近似答案足够好,并且表统计信息相当准确,则可以使用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;