Django 如何将SphinxQuerySet与QuerySet相交
是否可以将两个QuerySet相交:SphinxQuerySet和普通django的QuerySet 我需要用普通的django过滤器过滤SphynxQuerySet。最好的方法是什么 我试着朝这个方向走: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
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,但这可能是因为该网站从未上线:)