2012-01-22 2 views
3

Я использую Haystack в одном приложении и его идеальный. Он индексирует все, что мне нужно. Но теперь я создал другое приложение с другой моделью и контентом, и я бы хотел, чтобы Haystack индексировал его. Идея состоит в том, чтобы создать два разных «поисковых» ссылок на моем веб-сайте, по одному для каждого приложения.Django - Haystack в двух разных приложениях

Однако, когда я добавляю вторую конфигурацию Стог индексировать его, я получаю некоторые проблемы ...

Я создал новый search_index.py (внутри моего нового приложения) со следующим содержанием:

import datetime 
from haystack.indexes import * 
from haystack import site 
from oportunity.models import Oportunity 


class OportunityIndex(SearchIndex): 
    title = CharField(document=True, use_template=True) 
    body = CharField() 
    date= DateTimeField() 

    def index_queryset(self): 
     return Oportunity.objects.filter(date=datetime.datetime.now()) 


site.register(Oportunity, OportunityIndex) 

, но, когда я бег питона manage.py rebuild_index я получаю следующее сообщение об ошибке:

line 94, in all_searchfields raise SearchFieldError("All SearchIndex fields with 'document=True' must use the same fieldname.") haystack.exceptions.SearchFieldError: All SearchIndex fields with 'document=True' must use the same fieldname.

+0

Не могли бы вы попытаться удалить из haystack.indexes import * и выполнить квалифицированный импорт? Однажды я столкнулся с такой проблемой. – ustun

ответ

4

Это известное ограничение Хейстекло, который был диск используется в few different places, где базовому хранилищу документов необходимо, чтобы поле документа было последовательно названо во всех поисковых моделях.

Это documented in the haystack docs, что имя поля рекомендуемого документа. В нижней строке вы не можете определить title = CharField(document=True) по одному индексу и content = CharField(document=True) по другому индексу, их нужно называть одинаковыми.

ЛУЧШАЯ ПРАКТИКА: укажите поле индекса text. Это recommended by the haystack docs и даст вам максимальную совместимость с сторонними приложениями.