4

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

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

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

提前致谢!

4

2 回答 2

3

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

于 2013-01-24T08:01:14.423 回答
1

非常感谢您的提示!

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

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

再次感谢!

于 2012-11-20T12:38:10.537 回答