Lud*_*udo 9 python django django-haystack
这让我有点生气,但看起来应该很简单.
我正在使用Django和Haystack并且有一个包含允许null的IntegerField的搜索索引.这基于Django中的相关模型,但我认为这不重要.例如:
class ThingIndex(indexes.ModelSearchIndex, indexes.Indexable):
group = indexes.IntegerField(model_attr='group__id', null=True)
class Meta:
model = Thing
Run Code Online (Sandbox Code Playgroud)
我有时希望我的Haystack查询返回此字段的None/Null项,所以我在搜索表单的__init__中进行过滤,但我无法获得查询来执行此操作.我尝试过的最明显的方法是:
self.searchqueryset.filter(group__isnull=True) # how to do it on a regular Django queryset
Run Code Online (Sandbox Code Playgroud)
但这不会返回任何记录.
现在我正在解决这个问题:
self.searchqueryset.exclude(group__in=range(1,100))
Run Code Online (Sandbox Code Playgroud)
哪个有效,但显然不是它应该做的方式:)
有人可以帮忙吗?
谢谢!
Rob*_*ujo 11
如果您正在使用ElasticSearch,则只需使用本机ElasticSearch就可以在不进行修补的情况下完成解决方案:
from haystack.inputs import Raw
self.searchqueryset.exclude(group = Raw("[* TO *]"))
Run Code Online (Sandbox Code Playgroud)
换句话说,过滤所有具有非emtpy组字段的文档:
from haystack.inputs import Raw
self.searchqueryset.filter(group = Raw("[* TO *]"))
Run Code Online (Sandbox Code Playgroud)
这也适用于SOLR以及其他Haystack后端应用相同的概念,但具有后端搜索语言的特定语法.
参考文献:
小智 9
我觉得这个问题没有得到解答.似乎op正在询问如何使用带有ElasticSearch后端的haystack.query.SearchQuerySet来过滤空条目.
在上面的示例中,替换
self.searchqueryset.filter(group__isnull=True)
Run Code Online (Sandbox Code Playgroud)
同
self.searchqueryset.filter(_missing_='group')
Run Code Online (Sandbox Code Playgroud)
不直观,但它是我到目前为止工作的唯一方式.
| 归档时间: |
|
| 查看次数: |
3807 次 |
| 最近记录: |