2012-11-20 39 views
4

我正在建立一個基於線程的特定主題的社交互動網站,想想Gmail,只有公共。在詞彙表中還會有一些靜態信息,以及博客,how-tos,知識庫等。它是django + postgres。Django模型架構在PostgreSQL中進行全文搜索

無論模型的類型如何,最重要的要求之一就是對所有信息進行全文搜索。如果確切的搜索短語出現在博客中,並且它在郵件中的扭曲姐姐,而不是來自博客條目的片段應該首先出現在搜索結果中,然後是來自該消息的片段。所以,我需要一個包含索引所有文本的表格,以及指向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會提供什麼優雅的解決方案?什麼可能是解決問題的最有效的體系結構?

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

在此先感謝!

+1

您是否正在尋找https://docs.djangoproject.com/zh/dev/ref/contrib/contenttypes/?也不要將CharFields用於對象ID。另外,你的「選擇」是錯誤的,它必須是2元組的元組。 – rantanplan

+0

是的,我知道,只是簡化了一切。感謝提示,現在查看它! – funkifunki

+1

我使用SOLR搜索文本charfields。 [Solr](http://www.chrisumbel.com/article/django_solr) – PepperoniPizza

回答

1

非常感謝提示!

而CONTENTTYPES是這類任務的理想,實在是很有誘惑力的是DB獨立

從我至今讀,Solr的是一個可靠的搜索引擎,但我想,我會去嘗試通過Haystack的ElasticSearch

再次感謝!

+1

我已經使用了Solr和ElasticSearch。我同意ElasticSearch是要走的路。 – rantanplan

3

我和this snippet合作很成功,它使用PostgreSQL的tsearch2。我以各種不同的方式調整了各種不同的目的,但基本上它工作得很好,並且很容易實現。

+0

這是一個有價值的信息,非常感謝!對於目前的項目,我已經建立了haystack + elasticsearch,但一定會在適當的時候使用這個片段! – funkifunki

+0

任何這樣的sqlite3代碼片段?請看看我的[OP](http://stackoverflow.com/questions/35020797/how-to-use-full-text-search-in-sqlite3-database-in-django)和幫助。 –