gpt4 book ai didi

django - 我如何在 DRF 中搜索多项内容(全文、地理位置等)?

转载 作者:行者123 更新时间:2023-11-29 12:07:10 24 4
gpt4 key购买 nike

我在 Django-REST 中有一个模型,它具有名称、描述等,以及使用 GeoDjango 的地理定位。现在,我想要一个复杂的搜索,在名称和描述字段中进行全文搜索以及地理位置搜索(用户提供位置点和最大距离)。如果需要,我希望它们能够独立工作或一起工作。

我已经了解了如何进行全文搜索(此处:https://docs.djangoproject.com/en/2.2/ref/contrib/postgres/search/)以及如何基于距离进行搜索(此处:https://docs.djangoproject.com/en/2.2/ref/contrib/gis/db-api/)。

到目前为止我的代码(模型,无关紧要,只要想到名称、描述和位置):

class SearchAuctions(APIView):
permission_classes = [AllowAny]

def get(self, request, format=None):
"""
Return auctions after filtering.
"""
items = AuctionItem.objects

if 'textToSearch' in request.data.keys():
textToSearch = request.data['textToSearch']
items = AuctionItem.objects.annotate(
search=SearchVector('name', 'description'),
).filter(search=textToSearch)

itemSerializer = AuctionItemSerializer(items, many=True)

return Response(itemSerializer.data)

不确定如何在过滤器之间创建链接。我已经提出多个请求并找到共同元素,但我想这太慢了。

最佳答案

正如我在评论中提到的,您可以在不评估查询的情况下将过滤器应用于查询。这允许您根据条件创建查询,例如

class SearchAuctions(APIView):
permission_classes = [AllowAny]

def get(self, request, format=None):
"""
Return auctions after filtering.
"""
items = AuctionItem.objects

if 'textToSearch' in request.data.keys():
textToSearch = request.data['textToSearch']
items = items.annotate(
search=SearchVector('name', 'description'),
).filter(search=textToSearch)

if 'locationToSearch' in request.data.keys():
locationToSearch = request.data['locationToSearch']
items = items.filter(location=locationToSearch)

itemSerializer = AuctionItemSerializer(items, many=True)

return Response(itemSerializer.data)

关于django - 我如何在 DRF 中搜索多项内容(全文、地理位置等)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57546690/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com