python - Django ·干草堆。 And, or 在搜索查询集中

标签 python django search django-haystack pysolr

使用:Haystack 和 Sorl。

我需要创建一个搜索查询集来通过过滤器搜索产品。

首先,我需要仅根据我的网站(Django 网站框架)过滤产品。所以我这样做:

sqs = sqs.filter(site=site.pk)

它返回这样的搜索查询:

site:(6)

好的。

然后我需要按属性过滤:

sqs = sqs.filter(attribute_codes='power', attribute_values__range=(20, 30))
sqs = sqs.filter(attribute_codes='power', attribute_values__range=(40, 50))

它会生成这样的查询:

(site:(6) AND attribute_codes:(power) AND attribute_values:(["20" TO "30"]) AND attribute_values:(["40" TO "50"]))

但是,我需要进行这样的查询:

(site=6) AND ((attributes1) OR (attributes2))

所以我尝试将按属性过滤更改为 filter_or:

 sqs = sqs.filter_or(attribute_codes='power', attribute_values__range=(20, 30))
sqs = sqs.filter_or(attribute_codes='power', attribute_values__range=(40, 50))

结果是:

(site:(6) OR (attribute_codes:(power) AND attribute_values:(["20" TO "30"])) OR (attribute_codes:(power) AND attribute_values:(["40" TO "50"])))

但我还需要其他:

    (site=6) AND ((attributes1) OR (attributes2))

那么,如何做到这一点呢? 请帮帮我

最佳答案

与 Django 的查询集 Q 对象一样,django haystack 有一个 SQ 对象,它允许使用 |&过滤中的运算符

sqs = sqs.filter(site=6)
sqs = sqs.filter(SQ(attribute_codes='power') | SQ(attribute_values__range=(20, 30))

sqs = sqs.filter(
    SQ(site=6) & (SQ(attribute_codes='power') | SQ(attribute_values__range=(20, 30))
)

关于python - Django ·干草堆。 And, or 在搜索查询集中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44391568/

相关文章:

python - 使用python将列表存储到csv文件中

python - 如何通过{{variable/method}}将Django模板代码注入(inject)到模板中?

algorithm - 在随机数据上高效搜索索引的算法或方法有哪些?

python - 如何使用 Django 中的默认连接从 Select 查询中获取键(列名)-值对

Python函数多个IF语句?

python - Seaborn 热图行为

django - 使用 django-storages 上传静态文件时有选择地应用 AWS header

python - 如何在 Django 2 中实现 Django-Private-Chat

php - 为较大的句子分配标签?

java - 深度优先迭代加深算法不返回结果(java中)