在 PostgreSQL 中进行全文搜索的 Django 模型架构

标签 django postgresql database-design full-text-search

我正在为特定主题的社交互动构建一个网站,该网站基于线程,想想 gmail,仅公开。词汇表中也会有一些静态信息,还有博客、how-tos、知识库等。就是django+postgres。

最重要的要求之一是对所有信息进行全文搜索,而不管模型的类型。如果确切的搜索短语出现在博客中,而它扭曲的姐妹出现在消息中,那么博客条目中的一个片段应该首先出现在搜索结果中,然后是消息中的一个片段。所以,我需要一个包含所有文本索引的表,以及数据库中_any_other_table_ 的链接。

我的第一个想法是创建一个带有“松散引用”的单独模型,例如:

class Content(models.Model):
    obj_id= CharField() # An id of the object of a given model.
    model= CharField(choices=("Message", "BlogEntry", "HowTo", "EntityProfile",))
    content_type= CharField(choices=("subject", "body", "description", "tags",))
    body= TextField()

但感觉有点不对……这预示着在创建和重新链接实例时会围绕引用的完整性造成不必要的麻烦。

所以,问题是——django 是否提供任何优雅的解决方案?解决问题的最有效架构可能是什么?

我不是要直接回答,而是要提示。

提前致谢!

最佳答案

我在使用 this snippet 方面取得了很大的成功,它使用 PostgreSQL 的 tsearch2。我以各种不同的方式针对各种不同的目的对其进行了调整,但基本上它运行良好,并且非常容易实现。

关于在 PostgreSQL 中进行全文搜索的 Django 模型架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13464895/

相关文章:

PostgreSQL order by month name on distinction

ruby-on-rails - 如何使用 pg_search 搜索对象的虚拟属性?

arrays - JSONB 或整数数组

database-design - 分解数据库密集型应用程序

MySql 检索产品和价格

Python 子进程返回非零退出状态 -6

python - Django:创建新项目时,弹出 "django-admin.py: command not found"错误

django - 链接到 Django 中的当前页面,是否带有附加 GET 参数?

Django Celery beat 在开始时崩溃

sql - 将两列相乘并在新列 PostgreSQL 中显示结果