2

干し草の山のドキュメントの指示に従っています。

SearchQuerySet()。all()の結果が得られません。

問題はここにあると思います

$ ./manage.py rebuild_index

WARNING: This will irreparably remove EVERYTHING from your search index in connection 'default'.
Your choices after this are to restore from backups or rebuild via the `rebuild_index` command.
Are you sure you wish to continue? [y/N] y

Removing all documents from your index because you said so.
All documents removed.
Indexing 0 notes. // <-- here 0 notes!

mysite / note/search_indexes.pyは次のようになります

import datetime
import haystack
from haystack import indexes
from note.models import Note

class NoteIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    author = indexes.CharField(model_attr='user')
    pub_date = indexes.DateTimeField(model_attr='pub_date')

    def get_model(self):
        return Note

    def index_queryset(self):
        """Used when the entire index for model is updated."""
        return self.get_model().objects.filter(pub_date__lte=datetime.datetime.now())

そして私はmysite/note / templates / search / indexes / note/Note_text.txtを持っています

{{ object.title }}
{{ object.user.get_full_name }}
{{ object.body }}

干し草の山のドキュメントに言及しているデバッグ

haystack.autodiscoverを実行するsearch_sites.pyはありますか?

モデルをメインのhaystack.site(通常はsearch_indexes.py内)に登録しましたか?

しかし、search_sites.py、haystack.autodiscover、haystack.siteのいずれも最初の記事では言及されていませんでした。
私は困惑している。彼らのドキュメントは異なる干し草の山のバージョンを扱っていますか?

私のセットアップは..

haystackバージョン2.0.0.betadjango1.3.1
solr
3.6.0
sqlite 3

4

3 に答える 3

2
def index_queryset(self):
        """Used when the entire index for model is updated."""
        return self.get_model().objects.filter(pub_date__lte=datetime.datetime.now())

犯人でした。

理由はわかりませんが、コメントアウトすると問題が解決します。
私のシステムの「時間」はどういうわけかめちゃくちゃだと思います。

于 2012-04-13T12:57:24.947 に答える
1

そのはず...

def index_queryset(self, using=None):

これで問題が解決するかどうかはわかりませんが、それはメソッドの正しい署名です。

于 2013-09-12T18:20:46.180 に答える
0

def index_queryset(self)を削除することは理にかなっています。これは通常の Django ORM QuerySetを構築し、フルテキスト インデックスに入れるオブジェクトを決定します。サンプルindex_querysetは、オブジェクトを過去のタイムスタンプのみに制限します (より前)。

したがって、実際には日時処理の問題があります。SQL データベースのタイムゾーンと時刻の保存方法を確認してください。

UTC ロケールのタイムスタンプは、ニューヨークおよび米国の大部分よりも約 5 時間進んでいます。SQLite は、将来の UTC 時間を選択することで、同じ問題を引き起こしました。

于 2014-03-07T18:48:18.173 に答える