Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何将SphinxQuerySet与QuerySet相交_Django - Fatal编程技术网

Django 如何将SphinxQuerySet与QuerySet相交

Django 如何将SphinxQuerySet与QuerySet相交,django,Django,是否可以将两个QuerySet相交:SphinxQuerySet和普通django的QuerySet 我需要用普通的django过滤器过滤SphynxQuerySet。最好的方法是什么 我试着朝这个方向走: ids = [] for obj in Object.search.query(query).all(): ids += [obj.id] qs = Object.objects.all().filter(id__in=ids).filter(some_other_filte

是否可以将两个QuerySet相交:SphinxQuerySet和普通django的QuerySet

我需要用普通的django过滤器过滤SphynxQuerySet。最好的方法是什么

我试着朝这个方向走:

ids = []
for obj in Object.search.query(query).all():
        ids += [obj.id]
qs = Object.objects.all().filter(id__in=ids).filter(some_other_filters)
但我觉得这并不是最好的方法。

在django sphinx中有一个(现已修复)缺陷,以前查询中的过滤器没有被清除,这意味着我必须在没有任何过滤器的情况下进行完整搜索,然后与普通过滤器相交。我就是这样做的:

# First get list of objects matching criteria
results = Object.objects.filter(qset).distinct()

# Save id's from mysql queryset for later
qs_ids = [object.id for object in results]

# Do sphinx query
search_results = Object.search.query(search_terms)

# Now manually filter the sphinx queryset
results = [object for object in search_results if object.id in qs_ids]

return results
当然,这不如让斯芬克斯做过滤那么有效,但我当时没有选择

也许你可以重新考虑你的策略,这样你就不需要自己手动过滤查询了?

django sphinx中有一个(现已修复)缺陷,以前查询中的过滤器没有被清除,这意味着我必须在没有任何过滤器的情况下进行完整搜索,然后与普通过滤器相交。我就是这样做的:

# First get list of objects matching criteria
results = Object.objects.filter(qset).distinct()

# Save id's from mysql queryset for later
qs_ids = [object.id for object in results]

# Do sphinx query
search_results = Object.search.query(search_terms)

# Now manually filter the sphinx queryset
results = [object for object in search_results if object.id in qs_ids]

return results
当然,这不如让斯芬克斯做过滤那么有效,但我当时没有选择


也许您可以重新考虑您的策略,这样您就不需要自己手动筛选查询了?

谢谢您提供了更方便的语法!您是否将SphynxQuerySet-self的内置硬编码限制更改为更大的值?我没有找到通过standart接口来实现这一点的方法。实际上,我更喜欢您在=ids中使用id__,而不是我的解决方案,但有一些原因我无法做到这一点。。。迷失在时间的迷雾中:)我不认为我对self做了什么。_limit,但这可能是因为该网站从未上线:)谢谢你提供了更方便的语法!您是否将SphynxQuerySet-self的内置硬编码限制更改为更大的值?我没有找到通过standart接口来实现这一点的方法。实际上,我更喜欢您在=ids中使用id__,而不是我的解决方案,但有一些原因我无法做到这一点。。。迷失在时间的迷雾中:)我不认为我对self做了什么。_limit,但这可能是因为该网站从未上线:)