4

スレッドに基づいて、特定のトピックに関する社会的相互作用のための Web サイトを構築しています。Gmail を考えてください。公開のみです。ボキャブラリ、ブログ、ハウツー、ナレッジ ベースなどにもいくつかの静的情報があります。それは django+postgres です。

最も重要な要件の 1 つは、モデルの種類に関係なく、すべての情報に対する全文検索です。正確な検索フレーズがブログに表示され、ねじれた姉妹がメッセージに表示される場合、ブログ エントリのスニペットが検索結果の最初に表示され、その後にメッセージのスニペットが表示されます。したがって、すべてのテキストがインデックス化されたテーブルと、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 に答える