一、基础配置

  1. 下载依赖,与之前配置的ES版本一致。
    ES的配置请参考文件 ES的基础使用
pip install elasticsearch==7.15.2
  1. 在config文件夹下创建一个ES的配置文件
    在这里插入图片描述
    配置ES的IP和端口
    在这里插入图片描述

  2. 在使用的视图中创建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"<

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部