1

関連するモデル フィールドで Haystack SearchQuerySet をどのようにフィルタリング/結合しますか?

次のようなクエリがあります。

sqs = SearchQuerySet().models(models.Person)

これは、同等の管理ページが返すのと同じ結果を返します。

ただし、外部キーでリンクされたモデル レコードでフィルタリングしようとすると、次のようになります。

sqs = sqs.filter(workplace__role__name='teacher')

/admin/myapp/person/?workplace__role__name=teacherページは複数のレコードを返しますが、何も返しません。

これらの関連モデルの全文検索はしたくありません。単純な完全一致フィルターのみを実行したい。Haystackでそれは可能ですか?

4

2 に答える 2

6

haystack でサポートされているような検索エンジンを使用して結合を実行することはできません。このようなクエリを作成するには、検索インデックスで「非正規化」方式でフィルタリングする情報を追加する必要があります。

class ProfileIndex(indexes.SearchIndex, indexes.Indexable):
    # your other fields, most likely model attributes
    role_name = indexes.CharField()

    def get_model(self):
        return Person

    def prepare_role_name(self, person):
        return person.workplace.role_name

次に、フィールドでフィルタリングできますrole_name。たとえば、インデックスを更新してください。名前が変更された場合は、検索インデックス内の対応するすべてのエントリを更新する必要があります。

于 2013-05-22T10:29:07.757 に答える
0

これを行うこともできます:

class ProfileIndex(indexes.SearchIndex, indexes.Indexable):
    # your other fields, most likely model attributes
    role_name = indexes.CharField(model_attr='workplace__role__name')

    def get_model(self):
        return Person

また、role_name でフィルタリングできます。ここで見ました。http://django-haystack.readthedocs.org/en/latest/searchindex_api.html

于 2015-09-18T21:08:13.840 に答える