Джанго - Хейстек в двух разных приложениях - PullRequest
3 голосов
/ 23 января 2012

Я использую 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)

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

строка 94, в all_searchfields вызывает SearchFieldError ("Все поля SearchIndex с 'document =True 'должен использовать одно и то же имя поля. ") Haystack.exceptions.SearchFieldError: Все поля SearchIndex с' document = True 'должны использовать одно и то же имя поля.

1 Ответ

4 голосов
/ 23 января 2012

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

В документах haystack задокументировано *1006* каково рекомендуемое имя поля документа. В итоге, вы не можете определить title = CharField(document=True) для одного индекса и content = CharField(document=True) для другого индекса, они должны быть названы одинаково.

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

...