在Django中使用Celery进行全文搜索
- 安装Celery和
django-celery
。
pip install celery django-celery
- 配置Celery。
在Django项目的settings.py文件中添加以下配置:
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
- 编写任务。
在Django项目的某个app中,创建tasks.py文件,并编写全文搜索任务,如下:
```python
from celery import shared_task
from django.contrib.postgres.search import SearchQuery, SearchRank, SearchVector
from myapp.models import MyModel
@shared_task
def search(query):
vector = SearchVector('title', 'content')
search_query = SearchQuery(query)
results = MyModel.objects.annotate(
rank=SearchRank(vector, search_query)
).filter(rank__gte=0.3).order_by('-rank')
return results
```
- 在视图中调用任务。
在Django项目的某个视图中,引入任务,并调用它:
```python
from myapp.tasks import search
def search_view(request):
query = request.GET.get('q')
if query:
results = search.delay(query)
# 处理结果...
return render(request, 'search.html')
```
在上述代码中,我们使用了delay()
方法来异步执行任务,并且将任务结果存储在results
变量中。在实际应用中,可能需要根据任务结果进行一些处理,比如将搜索结果传递给模板渲染出搜索列表。
- 运行Celery。
在Django项目的根目录下,执行以下命令:
celery -A myproject worker -l info
在实际应用中,可能需要使用supervisor等工具来监管Celery进程。
相关文章