2012-04-13 14 views
1

ich folgende Hinweise auf haystack documentation.django-Heuhaufen nicht Index meine Daten

Ich erhalte keine Ergebnisse für SearchQuerySet(). Alle().

denke ich, das Problem hier ist

$ ./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 wie

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()) 

sieht, und ich habe mysite/note/templates/Suche/Indizes/note/Note_text. txt

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

Debugging haystack document erwähnt

Haben Sie eine search_sites.py, die haystack.autodiscover ausführt?

Haben Sie Ihre Modelle bei der Haupt-haystack.site registriert (normalerweise in Ihrer search_indexes.py)?

Aber keiner von search_sites.py, haystack.autodiscover, haystack.site wurde im ersten Artikel erwähnt.
Ich bin so verwirrt. Arbeiten ihre Dokumente mit verschiedenen Heuhaufen-Versionen?

Meine Setups sind ..

Heuhaufen Version 2.0.0.beta
django 1.3.1
solr 3.6.0
SQLite 3

+0

In meinem (albernen) Fall hat der rebuild_index keine Produkte indexiert, weil es keine gab (db connection war unpassend). –

Antwort

1

Es soll ... seine

def index_queryset(self, using=None):

Ich weiß nicht, ob dies Ihr Problem beheben oder nicht, aber das ist die korrekte Signatur für das Verfahren.

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()) 

der Täter war.

Ich weiß nicht warum, aber das Auskommentieren behebt das Problem.
Ich denke, "Zeit" in meinem System ist irgendwie durcheinander.

0

Entfernen def index_queryset (self) macht Sinn. Es erstellt einen regulären Django ORM QuerySet, der entscheidet, welche Objekte in den Volltextindex eingefügt werden. Ihr Beispiel index_queryset begrenzt die Objekte auf Vergangenheit Zeitstempel nur (vor jetzt).

So haben Sie wirklich eine Datetime-Behandlung Problem. Überprüfen Sie Ihre SQL-Datenbank Zeitzone und wie es speichert Zeiten.

Ein Zeitstempel im UTC-Gebietsschema liegt etwa +5 Stunden vor New York und den meisten USA.SQLite verursachte das gleiche Problem für mich, indem ich UTC Zeiten in der Zukunft wählte.

Verwandte Themen