首页 > 其他分享 >Django操作ES实现搜索功能

Django操作ES实现搜索功能

时间:2024-09-29 12:18:32浏览次数:9  
标签:高亮 Django 搜索 query 题目 data ES

Django操作ES实现题目的高亮搜索功能

一、基础配置

  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"<

标签:高亮,Django,搜索,query,题目,data,ES
From: https://blog.csdn.net/m0_51453764/article/details/142461874

相关文章

  • NEKN96 Linear Regression
    HomeworkAssignment1LinearRegressionNEKN96GuidelinesUploadtheHWAin.zipformattoCanvasbeforethe2ndofOctober,23:59,andonlyuploadoneHWAforeachgroup.The.zipfileshouldcontaintwoparts:-Areportin.pdfformat,whichwillbe......
  • 深入理解 Nuxt.js 中的 app:data:refresh 钩子
    title:深入理解Nuxt.js中的app:data:refresh钩子date:2024/9/29updated:2024/9/29author:cmdragonexcerpt:摘要:本文详细介绍了Nuxt.js框架中的app:data:refresh钩子,包括其定义、用途、使用方法及实际应用案例。该钩子用于在数据刷新时执行额外处理,支持服务器端和客......
  • (赠源码)Python+django+echars+MySQL+爬虫+大屏 boss直聘数据分析可视化系统的设计与实
    摘要随着互联网的飞速发展和技术的不断进步,数据分析和可视化技术在各个领域都扮演着越来越重要的角色。在人才招聘领域,招聘平台作为连接求职者和招聘公司的重要平台,需要不断创新和提升服务体验。设计和实现一个boss直聘数据分析可视化系统,可以帮助BOSS直聘平台更好地利用数......
  • The 13th Shandong ICPC Provincial Collegiate Programming Contest
    目录写在前面I签到A签到D二分答案,贪心G排序,贪心L构造,思维B模拟,拓扑排序E数学,结论,模拟M计算几何,单调性J二进制,连通性问题,并查集K贪心orDP,结论,构造F线段树优化DP写在最后写在前面补题地址:https://codeforces.com/gym/104417。以下按个人向难度排序。妈的调休太顶......
  • 使用MessagePipe实现进程间通信
    使用MessagePipe实现进程间通信 1、MessagePipe介绍可以用于.NET和Unity上面的高性能的内存/分布式消息传递管道。适用于发布/订阅模式、CQRS的中介模式、Prism中的EventAggregator、IPC(进程间通信)-RPC等。支持:依赖注入过滤器管道更好的事件同步/异步带键值的/无键值......
  • 深度DFS 和 广度BFS搜索算法学习
    深度DFS和广度BFS搜索算法学习 目录广度优先的动态图深度优先的动态图广度和深度的具体步骤深度和广度的应用场景 图的两种遍历方式:深度优先遍历(DFS——DepthFirstSearch)广度优先遍历(BFS——BreathFirstSearch)图的遍历算法里,处理临时数据,依赖两个抽象......
  • #1064-You hare an error in your SQL syntar:check the nanual that corresponds to y
    静态分析:分析时发现6个错误。1.不应出现的开始声明。(near“44”“atposition1)2,不应出现的开始声明。(near”‘use_polyfill“atposition6)3,不应出现的开始声明。(near”‘O‘“atposition21)4,不应出现的开始声明。(near”2“”atposition25)5.不应出现的开始声明。......
  • MySQL登录时出现ERROR 1045: Access denied for user ‘root‘@‘localhost‘ (using p
    Mysql在使用过程中,可能会遇到登录问题,比如常见的错误信息:“Accessdeniedforuser‘root’@‘localhost’(usingpassword:YES)”。本文将分析这个问题的可能原因,并提供一系列解决方案. 定位报错原因出现这个Accessdenied问题的原因有如下可能:MySQL的服务器停止了。......
  • 【TypeScript】函数详解:参数和返回值的类型注解
    文章目录一、函数基础概述1.参数类型注解2.参数个数检查3.可选参数和默认值二、返回值类型注解1.基本的返回值类型注解2.自动类型推断三、异步函数与Promise返回值类型四、匿名函数与上下文类型推断五、高阶函数与回调六、总结TypeScript是JavaScript的......
  • Codesys3.5 封装库 和 库的调用
    1、库的建立第一步。 2、新建个文件夹,方便管理哦 3、然后在文件右键》添加对象中添加几个pou   4、随便建立几个。 4、设置工程信息,也就库信息哦双击工程信息弹出 5、最后就是生成库文件哦。   6、调用刚才的库,要新建一个工程哦。   7......