3

私はdjango-haystackを正しく理解していないと思います:

いくつかのフィールドを含むデータモデルがあり、そのうちの2つを検索します。

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True, default=None)
    twitter_account = models.CharField(max_length=50, blank=False)

私の検索インデックス設定:

class UserProfileIndex(SearchIndex):
    text = CharField(document=True, model_attr='user')
    twitter_account = CharField(model_attr='twitter_account')

    def get_queryset(self):
        """Used when the entire index for model is updated."""
        return UserProfile.objects.all()

しかし、検索を実行すると、「username」フィールドのみが検索されます。「twitter_account」は無視されます。dbshel​​lを介して検索結果を選択すると、オブジェクトには「user」と「twitter_account」の正しい値が含まれていますが、結果ページに「結果なし」と表示されます。

    {% if query %}
        <h3>Results</h3>

        {% for result in page.object_list %}
            <p>
               <a href="{{ result.object.get_absolute_url }}">{{ result.object.id }}</a>
            </p>
        {% empty %}
            <p>No results</p>
        {% endfor %}
    {% endif %}

何か案は?

4

1 に答える 1

9

twitter_accountフィールドのような他のフィールドの特定の検索を定義しない限り、haystackは一般的な検索にドキュメントフィールドを使用するためだと思います。

干し草の山のドキュメントから

すべてのSearchIndexには、document = Trueのフィールドが1つ(そして1つだけ)必要です。これは、Haystackと検索エンジンの両方に、どのフィールドが内部を検索するための主要なフィールドであるかを示します。

次のようにインデックスを指定してみてください

class UserProfileIndex(SearchIndex):
    text = CharField(document=True, use_template=True)
    user = CharField(model_attr='user')
    twitter_account = CharField(model_attr='twitter_account')

search / indexes//userprofile_text.txtという名前のファイルを作成します

これには次のものが含まれます

{{ object.user.get_full_name }}
{{ object.twitter_account}}

これで、インデックスフィルタを指定しない場合、haystackはこのファイルの内容(必要なものを追加できます)を検索します。

于 2010-04-30T01:21:16.327 に答える