如何在Django Haystack中查询空的MultiValueField结果

时间:2012-11-01 20:10:15

标签: django search elasticsearch django-haystack

使用Django 1.4.2,Haystack 2.0beta和ElasticSearch 0.19,如何查询MultiValueField的空集[]的结果?

2 个答案:

答案 0 :(得分:0)

我创建一个名为num_<field>的整数字段并对其进行查询。

在此示例中,“电子邮件”是MultiValueField,因此我们将创建“num_emails”:

class PersonIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    name = indexes.CharField(model_attr='name')
    emails = indexes.MultiValueField(null=True)
    num_emails = indexes.IntegerField()

    def prepare_num_emails(self, object):
        return len(object.emails)

现在,您可以在搜索中使用

SearchQuerySet().filter(num_emails=0)

答案 1 :(得分:0)

您还可以更改prepare_的{​​{1}}方法:

MultiValueField

然后您可以过滤:

def prepare_emails(self, object):
    emails = [e for e in object.emails]
    return emails if emails else ['None']