【问题标题】:Django models architecture for full-text search in PostgreSQL用于 PostgreSQL 中全文搜索的 Django 模型架构
【发布时间】:2012-11-08 00:42:52
【问题描述】:

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

最重要的要求之一是对所有信息进行全文搜索,无论模型的类型如何。如果确切的搜索短语出现在博客中,并且其扭曲的姐妹出现在消息中,则博客条目中的 sn-p 应该首先出现在搜索结果中,然后是消息中的 sn-p。所以,我需要一个包含所有文本索引的表,以及 db 中 _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 会提供任何优雅的解决方案吗?解决该问题的最有效架构可能是什么?

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

提前致谢!

【问题讨论】:

  • 您在寻找这个docs.djangoproject.com/en/dev/ref/contrib/contenttypes 吗?也不要将 CharFields 用于对象 ID。另外你的choices错了,一定是2元组的元组。
  • 是的,我知道,只是简化了一切。感谢您的提示,现在检查一下!
  • 我使用 SOLR 进行搜索,文本字符域。 Solr

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


【解决方案1】:

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

【讨论】:

  • 这是一个有价值的信息,非常感谢!对于当前项目我已经设置了 haystack + elasticsearch,但在适当的时候肯定会使用这个 sn-p!
  • sqlite3 有这样的 sn-p 吗?请查看我的OP 并提供帮助。
【解决方案2】:

非常感谢您的提示!

虽然 contenttypes 是此类任务的理想选择,但独立于 DB 确实很诱人

从我目前所读到的,Solr 是一个可靠的搜索引擎,但我想,我会去尝试通过 Haystack 的 ElasticSearch

再次感谢!

【讨论】:

  • 我使用过 Solr 和 ElasticSearch。我同意 ElasticSearch 是要走的路。
猜你喜欢
  • 2018-07-22
  • 1970-01-01
  • 2020-08-22
  • 2020-02-28
  • 2022-08-11
  • 2011-08-08
  • 2013-03-09
  • 2011-03-29
  • 1970-01-01
相关资源
最近更新 更多