2013-04-18 4 views
2

Используя django-haystack 2.0.0 и xapian-haystack 2.0.0, перенесли весь код с 1.1.5, как сказано в docs. Теперь мой search_indexes.py выглядит следующим образом:Django-haystack не обновляет индекс

from haystack import indexes 
from app.models import Post 

class PostIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 

    def get_model(self): 
     return Post 

    def index_queryset(self, using=None): 
     """Used when the entire index for model is updated.""" 
     return self.get_model().objects.filter(visible=True) 

Но когда я иду rebuild_index, он говорит:

Вы уверены, что хотите продолжить? [y/N] y

Извлечение всех документов из вашего индекса, потому что вы так выразились. Все удаленные документы .

С многословием:

Skipping '<class 'django.contrib.auth.models.Permission'>' - no index. 
Skipping '<class 'django.contrib.auth.models.Group'>' - no index. 
... 
Skipping '<class 'app.models.Post'>' - no index. 

Так что, я не знаю, почему стог не индексировать эту модель.

ответ

1

Вы должны реально добавить поля в индекс, так что под «текст» добавить:

post1 = indexes.CharField(model_attr='postfield1', null=True) 

И тогда в вашем post_text.txt шаблоне индексного файла:

{{object.post1}} 

Теперь он должен работать ,

+0

Спасибо, я попробую это. – amureki

1

Вы не добавили поля, которые вы хотите найти, в вашем

search_indexes.py

файла. Вы должны сделать так:

class PostIndex(indexes.SearchIndex, indexes.Indexable): 
text = indexes.CharField(document=True, use_template=True) 
data = indexes.CharField(model_attr='data', blank=True, null=True) 

def get_model(self): 
    return Post 

def index_queryset(self, using=None): 
    """Used when the entire index for model is updated.""" 
    return self.get_model().objects.filter(visible=True) 

, а затем создать структуру каталогов, как templates/search/indexes/'app_name'/post_text.txt. Теперь запустите команду ./manage.py rebuild_index.