django-haystack - 如何在同一搜索页面下引入少量应用程序?

时间:2012-03-09 22:37:11

标签: django search django-haystack

Django-haystack提供了如何使一个应用程序可搜索的示例。我们很棒! 但是,当您有多个应用程序且每个应用程序与用户相关时,您将如何进行操作 有干草堆(刻面),让你搜索你想要的东西。让我们对所有这三种模型说。

示例:向我展示所有拥有关键字"经验丰富的"在他们的描述中谁也有 一个名为"分析师"其Info关键字包含" bla"。

我用谷歌搜索没有结果。所以,我期待在相同的搜索页面下引入几个应用程序。

class UserProfile(models.Model):

    GENDER_MALE = 1
    GENDER_FEMALE = 2
    GENDER_CHOICES = (
        (GENDER_MALE, 'Male'),
        (GENDER_FEMALE, 'Female'),
    )

    user = models.OneToOneField(User, related_name="%(class)s", unique=True)

    full_name = models.CharField(
                _("Full name"), 
                max_length=200, 
                blank=True, 
    )

    gender = models.IntegerField(
                _('Gender'),
                choices=GENDER_CHOICES,
                blank=False,
                null=True,
    )

    # common
    country = CountryField(
                _('Country'),
                null=True,
                blank=False,
    )

    # common
    about = models.TextField(
                _('About Me'), 
                blank=True, 
                validators=[MaxLengthValidator(400)],
    )

    created_at = models.DateTimeField(auto_now_add = True)
    updated_at = models.DateTimeField(auto_now = True)


    def __unicode__(self):
        return u'%s' % (self.user.username)


class Skill(models.Model):

    user = models.ForeignKey(
                User, 
                related_name="%(class)s"
    )

    name = models.CharField(
                _('Skill Name'),
                max_length=70,
                null=False
    )

    category = models.ForeignKey(
                'self',
                blank=True,
                null=True
    )

    is_active = models.BooleanField(
                default=True
    )

    created_at = models.DateTimeField(auto_now_add = True)
    updated_at = models.DateTimeField(auto_now = True)

    def __unicode__(self):
        return u'%s' % (self.name)

class Info(models.Model):
    user = models.ForeignKey(
                User,
                related_name="%(class)s",
                null=False
    )

    description = models.TextField(
                blank=False, 
    )

    keywords = models.CharField(
                blank=True,
                null=True, 
                max_length=56,
    )

    created_at = models.DateTimeField(auto_now_add = True)
    updated_at = models.DateTimeField(auto_now = True)

    def __unicode__(self):
        return u'%s' % self.title

1 个答案:

答案 0 :(得分:1)

我认为如果我没有错,那么你的问题是如何使facet适用于多个应用程序。

在url.py中尝试类似

的内容
sqs = SearchQuerySet().facet('field1').facet('field2').facet('field3') 

urlpatterns += patterns('haystack.views',
url(r'^$', FacetedSearchView(form_class=FacetedSearchForm, searchqueryset=sqs), name='haystack_search'),) 

在search.html中

{% if facets.fields.field1 %} {% for type1 in facets.fields.field1 %} 
{{ type1.0 }} ({{ type1.1 }}) {% endfor %} {% else %} 
No type1 facets.

{% endif %} 
{% if facets.fields.field2 %} {% for author in facets.fields.field2 %} 
{{ type2.0 }} ({{ type2.1 }}) {% endfor %} {% else %} 
No type2 facets.

{% endif %} 
{% if facets.fields.field3 %} {% for author in facets.fields.field3 %} 
{{ type3.0 }} ({{ type3.1 }}) {% endfor %} {% else %} 
No type3 facets.

{% endif %} 

您的应用应具有单独的search_index文件。

检查rebuild_index和update_index的输出,无论索引是否正确完成。