【问题标题】:How to implement a fast search(2-3 sec) in django containing large dataset?如何在包含大型数据集的 django 中实现快速搜索(2-3 秒)?
【发布时间】:2020-03-23 23:55:05
【问题描述】:

我正在 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】:

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

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

您必须为您的应用程序添加适当的全文搜索。

在您的情况下,我看到您可以采用两种方法:

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

您都必须通过构建自己的自定义过滤器后端来与 django-rest-framework 集成。

【讨论】:

  • 我决定继续使用 Elastic 搜索,结果证明它的速度非常快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
  • 2014-08-07
  • 2016-10-16
相关资源
最近更新 更多