如何在包含大型数据集的django中实现快速搜索(2-3秒)?

问题描述 投票:0回答:1

我正在Django中的一个项目上工作,我必须在其中找到创建快速搜索的解决方案,该过程大约需要2-3秒才能立即加载搜索结果。我正在使用Django REST API来处理查询。目前,我正在获得结果,但是遍历包含大量数据的整个数据库通常会花费大量时间。我需要一个可以实施的解决方案,以便可以将搜索时间最多减少3秒。PS。我正在使用PostgreSQL作为数据库。

我的动机是搜索城市或国家,我需要得到结果。

models.py

 class Search(models.Model):
 city = models.CharField('Search Destination', max_length=256, null = true)
 country = models.CharField('Search country', max_length=256, null = true)
 latitude = models.CharField('Search latitude', max_length=256, null = true)
 longitude = models.CharField('Search longitude', max_length=256, null = true)
 createdAt = models.DateTimeField('Created At', auto_now_add=True, null = true)
 slug = models.SlugField(max_length=256, null=True, blank=True)

 def __str__(self):
     return self.city

serializers.py

class SearchSerializer(serializers.ModelSerializer):
    class Meta:
        model = Search
        fields = '__all__'

views.py

class ApiLandingSearchView(generics.ListAPIView):
    search_fields = ['city', country ]
    serializer_class = SearchSerializer
    filter_backends = [filters.SearchFilter]
    queryset = Search.objects.all()
django postgresql search django-rest-framework dataset
1个回答
0
投票

您似乎希望对通过API进行的全文搜索。

SearchFilter在后台使用django-admin搜索功能,因此它正在搜索文本字段内的文本,默认情况下在每个数据库上搜索速度都很慢。

您将必须在应用程序中添加适当的全文本搜索。

在您的情况下,您可以找到两种方法:

  • django-watson,基于postgres全文搜索功能
  • [django-haystack,可让您与elasticsearch集成

两者都必须通过构建自己的自定义Filter-Backend与django-rest-framework集成。

© www.soinside.com 2019 - 2024. All rights reserved.