在缩小或过滤时,如何在Djangohaystack的facet_counts()中包含计数为0的facet?

2024-05-29 07:45:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用django haystack和elasticsearch。我想在网站上展示运动会。现在我有两个方面;运动训练水平。它们都是复选框列表,并且都是“或”方向的,这意味着可以选择多个

例如,有3个培训选项,每个选项有4种不同的培训。所有的篮球训练都是初学者的,所有的足球和舞蹈训练都是高级的。这将导致以下情况:

Training options: Basketball (4), Football (4), Dancing (4)

Training levels: Beginner (4), Advanced (8)

如果单击basketball,将显示以下结果:

Basketball (3), Football (3), Dancing (3)

Beginner (3)

在这种情况下,高级选项被省略了。我想要的是:

Basketball (3), Football (3), Dancing (3)

Beginner (3), Advanced (0)

我使用以下代码:

from haystack.forms import FacetedSearchForm

class FacetedSearchSportForm(FacetedSearchForm):
    def __init__(self, *args, **kwargs):
        data = dict(kwargs.get("data", []))

        self.sports = data.get('sports', [])
        self.level = data.get('level', [])

        super().__init__(*args, **kwargs)

    def search(self):
        sqs = super().search()

        if not self.is_valid():
            return self.no_query_found()

        if self.sports:
            query = None

            for sport in self.sports:
                if query:
                    query += u' OR '
                else:
                    query = u''
                    query += u'"%s"' % sqs.query.clean(sport)

            sqs = sqs.narrow(u'sports_exact:%s' % query)

        if self.level:
            query = None

            for level in self.level:
                if query:
                    query += u' OR '
                else:
                    query = u''
                    query += u'"%s"' % sqs.query.clean(level)

            sqs = sqs.narrow(u'level_exact:%s' % query)

        return sqs

如果我用sqs.filter替换sqs.narrow,同样的情况也会发生。有人知道我如何在过滤facet时包含0的计数吗

谢谢


Tags: selfdatagetif选项情况querylevel

热门问题