返回顶部
首页 > 资讯 > 精选 >es+flask搜索小项目实现分页和高亮的示例代码怎么写
  • 814
分享到

es+flask搜索小项目实现分页和高亮的示例代码怎么写

2023-06-26 05:06:19 814人浏览 八月长安
摘要

这篇文章的内容主要围绕es+flask搜索小项目实现分页和高亮的示例代码怎么写进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!环境前端:html,CS

这篇文章的内容主要围绕es+flask搜索小项目实现分页和高亮的示例代码怎么写进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!

环境

项目展示

es+flask搜索小项目实现分页和高亮的示例代码怎么写

es+flask搜索小项目实现分页和高亮的示例代码怎么写

项目目录

es+flask搜索小项目实现分页和高亮的示例代码怎么写

主要源码

获取数据源并写入es

from lxml import etreefrom concurrent.futures import ThreadPoolExecutorfrom elasticsearch import Elasticsearchfrom elasticsearch import helpersimport requestsheaders = {    'user-agent': 'ua'}es = Elasticsearch()if not es.indices.exists(index='car'):    es.indices.create(index='car', mappings={        'properties': {            'url': {                'type': 'text'            },            'img': {                'type': 'text'            },            'title': {                'type': 'text'            },            'desc': {                'type': 'text'            }        }    })def task(url,page):    res = requests.get(url, headers)    text = res.text    tree = etree.HTML(text)    ul_list = tree.xpath('//ul[@class="article"]')    actions = []    for ul in ul_list:        li_list = ul.xpath('./li')        for li in li_list:            url = li.xpath('./a/@href'),            img = li.xpath('./a/div/img/@src'),            desc = li.xpath('./a/p/text()'),            title = li.xpath('./a/h4/text()')            if title:                doc = {                    '_index': 'car',                    'url': f'https:{url[0][0]}',                    'img': img[0][0],                    'desc': desc[0][0],                    'title': title[0],                }                actions.append(doc)    helpers.bulk(es, actions=actions)    print(f'第{page}页完成!')def main():    with ThreadPoolExecutor() as pool:        for i in range(1, 11):            url = f'Https://www.autohome.com.cn/all/{i}/'            pool.submit(task, url=url,page=i)if __name__ == '__main__':    main()

视图函数

from flask import Blueprintfrom flask import requestfrom flask import render_templatefrom flask import JSONifyfrom WEB.ext import esfrom pprint import pprintsearch_bp = Blueprint('search', __name__, url_prefix='/search')@search_bp.route('/', methods=['get', 'post'])def search():    if request.method == 'GET':        return render_template('search.html')    elif request.method == 'POST':        content = request.values.get('content')        size = 10        current = int(request.values.get('current', '0'))        if content:            res = es.search(index='car', query={                'match': {                    "title": content                }            }, highlight={                "pre_tags": "<span style='color: red'>"                ,                "post_tags": "</span>"                ,                "fields": {                    "title": {}                }            }, size=1000)        else:            res = es.search(index='car', query={                'match_all': {}            }, size=1000)        new_res = res['hits']['hits']        total = int(res['hits']['total']['value'])        need_page = (total // size) + 1        data = {            'res': new_res[current * size:current * size + size],            'need_page': need_page,            'total': total        }        return jsonify(data)

前端

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>General Search</title>    <link rel="stylesheet" href="{{ url_for('static',filename='css/bootstrap.min.css') }}">    <script src="{{ url_for('static',filename='js/jQuery.js') }}"></script>    <script src="{{ url_for('static',filename='js/bootstrap.min.js') }}"></script>    <style>        .title{            font-size: 25px;            font-weight: 10;        }        .result{            color: red;        }    </style></head><body><div>    <nav class="navbar navbar-default">      <div class="container-fluid">        <!-- Brand and toggle get grouped for better mobile display -->        <div class="navbar-header">          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">            <span class="sr-only">Toggle navigation</span>            <span class="icon-bar"></span>            <span class="icon-bar"></span>            <span class="icon-bar"></span>          </button>          <a class="navbar-brand" href="#" >General Search</a>        </div>        <!-- Collect the nav links, fORMs, and other content for toggling -->        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">          <ul class="nav navbar-nav">          </ul>          <div class="navbar-form navbar-left">            <div class="form-group">              <input type="text" class="form-control" placeholder="" id="content" >            </div>          </div>            <button class="btn btn-primary pull-right" id="submit" >搜&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;索</button>        </div><!-- /.navbar-collapse -->      </div><!-- /.container-fluid --></nav></div><div class="container">    General为您找到相关结果约<span id='count' class="result">0</span>个    <hr></div><div class="container" id="tags"></div><div class="text-center">    <nav aria-label="Page navigation">      <ul class="pagination" id="page">      </ul>    </nav></div><script>    function getData(current)    {        let content=$('#content').val()        let tags=$('#tags')        $('#count').text()        tags.empty()        $.ajax({            url:"",            type:'post',            data:{                'content':content,                'current':current            },            dataType:'JSON',            success:function (res){                let length=res.total                let need_page=res.need_page                $('#count').text(length)                $.each(res.res,function (index,value){                    let source=value._source                    let title=source.title                    let highlight=value.highlight                    if (highlight)                    {                        title=highlight.title                    }                    let div=`                    <div>                        <p><a href="${source.url}" target="_blank">                        <span class="title">${title}</span>                        <br>                        <img src="${source.img}" alt="">                        </a></p>                        <p>${source.desc}</p>                        <hr>                    </div>                    `                    tags.append(div)                })                $('#page').empty()                for(let i=0;i<need_page;i++)                {                    let tmp=i+1                    if (current==i)                    {                        $('#page').append('<li class="active"><span class="changePage">'+tmp+'</span></li>')                    }                    else {                        $('#page').append('<li><span class="changePage">'+tmp+'</span></li>')                    }                }            }        })    }    $('#submit').click(function (){        getData(0)    })    $('#page').on('click','li',function (){        getData($(this).text()-1)    })</script></body></html>

app配置

from flask import Flaskfrom flask_session import Sessionfrom web.ext import dbfrom .search.search import search_bpfrom flask_script import Managerfrom flask_migrate import Migrate, MigrateCommanddef create_app():    app = Flask(__name__)    app.config.from_object('settings.DevelopmentConfig')    app.reGISter_blueprint(search_bp)    Session(app)    db.init_app(app)    app = Manager(app)    Migrate(app, db)    app.add_command('db', MigrateCommand)    return app

感谢你的阅读,相信你对“es+flask搜索小项目实现分页和高亮的示例代码怎么写”这一问题有一定的了解,快去动手实践吧,如果想了解更多相关知识点,可以关注编程网网站!小编会继续为大家带来更好的文章!

--结束END--

本文标题: es+flask搜索小项目实现分页和高亮的示例代码怎么写

本文链接: https://lsjlt.com/news/306820.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • es+flask搜索小项目实现分页和高亮的示例代码怎么写
    这篇文章的内容主要围绕es+flask搜索小项目实现分页和高亮的示例代码怎么写进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!环境前端:html,cs...
    99+
    2023-06-26
  • es+flask搜索小项目实现分页+高亮的示例代码
    环境 前端:html,css,js,jQuery,bootstrap后端:flask搜索引擎:elasticsearch数据源:某某之家 项目展示 项目目录 主要源码 获取数据...
    99+
    2024-04-02
  • 微信小程序实现搜索关键词高亮的示例代码
    1,前言 项目中碰到一个需求,搜索数据并且关键词要高亮显示,接到需求,马上开干。先上效果图。源码已经做成了小程序代码片段,放入了GitHub了,文章底部有源码链接。 2,思路 ...
    99+
    2024-04-02
  • flask和vue前后端分离项目部署的代码怎么写
    本篇文章为大家展示了flask和vue前后端分离项目部署的代码怎么写,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。前段时间开发了一个项目, 我后端用的是flask框架写接口,前端用的是vue框架,项...
    99+
    2023-06-25
  • golang实现数组分割的示例代码怎么写
    这篇文章将为大家详细讲解有关golang实现数组分割的示例代码怎么写,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。需求:给定一个数组和一个正整数,要求把数组分割成多个正整数大小的数组,如果不...
    99+
    2023-06-22
  • uniapp 实现微信小程序全局分享的示例代码怎么编写
    这期内容当中小编将会给大家带来有关uniapp 实现微信小程序全局分享的示例代码怎么编写,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。uniapp 实现微信小程序的全局转发给好友/分享到朋友圈的...
    99+
    2023-06-22
  • Sharding-JDBC自动实现MySQL读写分离的示例代码怎么编写
    Sharding-JDBC自动实现MySQL读写分离的示例代码怎么编写,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、ShardingSphere和Shard...
    99+
    2023-06-25
  • Flutter实现仿微信分享功能的示例代码怎么写
    这期内容当中小编将会给大家带来有关Flutter实现仿微信分享功能的示例代码怎么写,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Flutter 用来快速开发 Android iOS平台应用,在Flutte...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作