在Django中使用Celery进行全文搜索

2023-04-11 00:00:00 django celery 全文
  1. 安装Celery和django-celery

pip install celery django-celery

  1. 配置Celery。

在Django项目的settings.py文件中添加以下配置:

CELERY_BROKER_URL = 'redis://localhost:6379/0' CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

  1. 编写任务。

在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
```

  1. 在视图中调用任务。

在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变量中。在实际应用中,可能需要根据任务结果进行一些处理,比如将搜索结果传递给模板渲染出搜索列表。

  1. 运行Celery。

在Django项目的根目录下,执行以下命令:

celery -A myproject worker -l info

在实际应用中,可能需要使用supervisor等工具来监管Celery进程。

相关文章