2017-02-23 7 views
1

Wagtailの文書ElasticSearch indexingでは、特定のモデルのすべてのインスタンスがインデックスに追加されているようです。しかし、QuerySetを作成するか、または何らかの種類のexcludeパラメータを設定できる(QuerySetを使用する方がよい)ことにより、索引付けされていない行をいくつか除外したいと考えています。Wagtailインデックス:一部のコンテンツを除外するか、クエリーセットを使用しますか?

これを行う方法はありますか?あるいはWagtailの外からWTモデルを索引付けする必要がありますか?

答えて

2

あなたは、インデックスを作成する項目のクエリセットを返し、モデルクラスにget_indexed_objectsメソッドを定義することができます

@classmethod 
def get_indexed_objects(cls): 
    return cls.objects.filter(live=True) 
+1

ありがとうございました!私はいつかこれのためにdocパッチを提出するつもりです。 – shacker

1

あなただけの結果にいくつかの単純なフィルタリングを実行する必要がある場合、私はすべてのインデックスを作成お勧めします(あなたは、ハードディスクの空き容量を節約するために、文書ののかなり多くを除くしていない限り)とクエリ時にフィルタリングを行う:

MyModel.objects.filter(live=True).search("..") 

セキレイは「Elasticsearchクエリの一部にそのフィルタを変換するので、このshouldnますpeに目立つ効果がある成果。これにより、すべてのフィルタフィールドがindex.FilterFieldを使用して索引付けされる必要があります(ページモデルを使用している場合、Wagtailはすべての基本ページフィールドに対してこれを行いました)。

このアプローチの主な利点は、今後別の検索機能でこれを行う必要がある場合にフィルタを簡単に削除できることです。たとえば、Wagtailは管理者のすべてのページを検索できるようにするためにこれを行いますが、フロントエンドのページだけを検索します。

+0

ありがとうKarl。私たちの場合、特定の記録を取り巻くことに注意する必要があるプライバシー問題があるかもしれないので、それらをインデックスから守ることが重要です。しかし、一般的なアプローチとして、すべてのインデックスを作成してからフィルタリングすることで、一般的に柔軟性が向上します。 – shacker

関連する問題