Более одного поля индекса в self.prepared_data

Я использую Haystack и Whoosh с Django, и я пытался создать индексы с помощью кода ниже:

class LivroIndex(SearchIndex):
    text = CharField(document=True, use_template=True)
    autor = CharField(model_attr='Autor')
    titulo =  CharField(model_attr='Titulo')
    datalivro = DateTimeField(model_attr='DataLivro')


    def index_queryset(self):
        return Livro.objects.filter(DataLivro__lte=datetime.datetime.now())


    def prepare(self, obj):
        self.prepared_data = super(LivroIndex, self).prepare(obj)
        self.prepared_data['text'] = obj.Autor
        return self.prepared_data

Livro - это класс в моем файле моделей.

Таким образом, вы можете использовать только «автор» в качестве поля, которое пользователи могут использовать для поиска контента внутри приложения. Есть ли другие способы заставить его принимать более одного поля?

Заранее спасибо!


person Community    schedule 22.03.2012    source источник


Ответы (2)


используйте шаблон и добавьте поля, которые вы хотите найти в поиске

нравится

{{ object.autor }}
{{ object.titulo  }}
{{ object.datalivro }}
person soField    schedule 22.03.2012
comment
Моя проблема больше в методах, которые Haystack использует для ядра поиска, а не в шаблоне. Это отлично работает и сработало один раз, но только если я ищу автора. Если я попытаюсь найти название книги, это не сработает, потому что поле не находится в методе подготовки. - person ; 28.03.2012

Вы должны объединить все поля, по которым вы хотите выполнить поиск, в поле text. Обычно вы делаете это через шаблон, а не через метод prepare. Инструкции см. в руководстве.

person Daniel Roseman    schedule 22.03.2012
comment
Я видел и сделал это руководство, и чтобы решить проблему, из-за которой Haystack не может найти результаты собственного поиска, вам нужно подготовить поля, которые вы хотите искать. Мне нужно выражение или команда, которую я могу подготовить более чем в одном поле. - person ; 28.03.2012