Django操作ES实现题目的高亮搜索功能
一、基础配置
- 下载依赖,与之前配置的ES版本一致。
ES的配置请参考文件 ES的基础使用
pip install elasticsearch==7.15.2
-
在config文件夹下创建一个ES的配置文件
配置ES的IP和端口
-
在使用的视图中创建ES的连接对象
1)打开work文件夹下的views.py文件,导入ES
2)创建ES客户端对象,连接ES服务
3)确认下ES的docker容器已经启动
二、使用ES完成题目的高亮搜索
分析:
1. ES的初始化接口
1)在TopicViewSet视图下增加ES的初始化接口,将MYSQL的数据同步到ES。
备注:这个接口的使用场景,ES崩掉或重新部署ES服务,将mysql中的数据同步到ES中进行恢复。
# 初始化ES
@action(methods=['put'], detail=False)
def inites(self,request):
# 获取mysql中的所有题目数据
serializer = self.get_serializer(self.get_queryset(),many=True)
data = serializer.data
# 插入到ES中
for i in data:
#将数据插入到topic这个索引中,没有索引就会创建
#这里不指明ID,会自动生成ID,id=i['id']这里我们直接使用数据库中的ID,与数据库保持一致
#body表示要插入的数据内容
es.index(index='topic',id=i['id'],body=i)
return Response(serializer.data)
2)使用POSTMAN进行测试
3)在ES-HEAD可视化工具中,可以查看到数据
2. 使用ES实现题目的增删改查
1. 题目的高亮搜索
@action(methods=['get'], detail=False)
def search(self,request):
"""
GET /topic/_doc/_search
{
"query":{
"match":{
"title":"" #title是要搜索的字段
}
},
"highlight":{
"pre_tags":"<span style='color:red'>", #开始标签
"post_tags":"</span>", #结束标签
"fields":{
"title":"" #title是要高亮的字段
}
}
}
"""
#获取前端传入的数据,GET请求通过query_params获取前端传入的参数
data = dict(request.query_params)
subject = data.get('subject',[''])[0] #如果没传参,返回['']空列表
query = {
"query":{
"match":{
"subject":subject
}
},
"highlight":{
"pre_tags"<
标签:高亮,Django,搜索,query,题目,data,ES
From: https://blog.csdn.net/m0_51453764/article/details/142461874