我有一个Article
模型,其中包含一个keywords
字段,该字段是按升序排序的关键字列表的ArrayField
。我想做一个查询,查找所有具有最小数量的关键字重叠的文章。
示例:
article_a = Article(keywords=["tag1", "tag2", "tag3"]
article_b = Article(keywords=["tag1", "tag2", ]
article_c = Article(keywords=["tag1", ]
article_a.find_similar_articles(min_overlap=2)
# Returns [article_b, ] since it overlaps with at least 2 elements.
有一个similar question here是用于一般的Postgres,而不是Django ORM。
有谁知道我如何以这种方式查询数组字段吗?或者你有另一种方法的建议,通过以另一种方式结构数据来实现相同的结果?
1条答案
按热度按时间fcg9iug31#
给定您的模型:
您可以使用RawSQL表达式获取重叠的关键字和长度:
我的答案很大程度上受到了这个SO answer的启发,它解释了如何在PostgreSQL上实现它。