我正在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()
您似乎希望对通过API进行的全文搜索。
SearchFilter
在后台使用django-admin搜索功能,因此它正在搜索文本字段内的文本,默认情况下在每个数据库上搜索速度都很慢。
您将必须在应用程序中添加适当的全文本搜索。
在您的情况下,您可以找到两种方法:
django-watson
,基于postgres全文搜索功能django-haystack
,可让您与elasticsearch集成两者都必须通过构建自己的自定义Filter-Backend与django-rest-framework集成。