поиск сена не для основного поля - PullRequest
0 голосов
/ 03 февраля 2011

Я хотел бы иметь любую возможность поиска индексированной модели из двух разных полей.Например, иногда поиск по имени, а другой поиск по роду занятий.Кто-нибудь знает правильный подход?Это мой текущий файл search_indexes.py:

class JobIndex(indexes.SearchIndex):
    text = indexes.CharField(document=True)
    name = indexes.CharField(model_attr='name')
    occupation = indexes.CharField(model_attr='occupation')

    def prepare(self, obj):
        self.prepared_data = super(JobIndex, self).prepare(obj)
        self.prepared_data['text'] = obj.name
        return self.prepared_data
    def get_queryset(self):
        return Job.objects.filter(status='open')
site.register(Job, JobIndex)

1 Ответ

0 голосов
/ 03 февраля 2011

Правильный подход заключается в использовании SearchQuerySet с фильтрами: http://docs.haystacksearch.org/dev/searchqueryset_api.html

В вашем случае это будет выглядеть примерно так:

from haystack.query import SearchQuerySet

sqs = SearchQuerySet()

# Find people named Bob
sqs.filter(name="Bob")
# Find people who are developers
sqs.filter(occupation="developer")
# Or chain searches: Find developers named Bob
sqs.filter(occupation="developer").filter(name="Bob")
...