手把手教你使用Flask搭建ES搜索引擎(实战篇)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 手把手教你使用Flask搭建ES搜索引擎(实战篇)

一、引言

随着互联网的发展,搜索引擎已经成为我们获取信息的重要工具。然而,传统的搜索引擎如Google、Baidu等,虽然功能强大,但在某些情况下,我们可能希望有一个更小、更灵活的搜索引擎来满足自己的需求。本文将手把手教你如何使用Flask和Elasticsearch来搭建一个简单的搜索引擎。

二、准备工作

在开始之前,你需要安装以下软件和库:

Flask:一个轻量级的Web框架,用于构建Web应用程序。

Elasticsearch:一个基于Lucene的搜索和分析引擎,用于全文搜索、结构化搜索和复合搜索。

Flask-Elasticsearch:一个Flask扩展,用于与Elasticsearch进行交互。

安装方法:

Flask:使用pip安装,命令为pip install Flask。

Elasticsearch:可以从Elasticsearch官网下载并按照说明进行安装。

Flask-Elasticsearch:使用pip安装,命令为pip install flask-elasticsearch。

三、搭建Flask应用程序

首先,我们需要创建一个Flask应用程序。在你的工作目录中,创建一个名为search_app.py的文件,并将以下代码复制到文件中:

from flask import Flask, render_template, request  
from flask_elasticsearch import Elasticsearch  
  
app = Flask(__name__)  
  
# 配置Elasticsearch连接  
elasticsearch = Elasticsearch(hosts=[{"host": "localhost", "port": 9200}])  
  
@app.route("/")  
def index():  
    return render_template("index.html")  
  
@app.route("/search", methods=["POST"])  
def search():  
    query = request.form.get("query")  
    results = elasticsearch.search(index="my_index", body={"query": {"match": {"content": query}}})  
    return render_template("search_results.html", results=results)

这个代码创建了一个简单的Flask应用程序,其中包含一个主页和一个搜索页面。在搜索页面上,用户可以输入查询字符串,并提交表单以执行搜索。

接下来,我们需要创建两个HTML模板文件:index.html和search_results.html。将以下代码复制到templates文件夹中(如果没有该文件夹,请创建一个):

index.html:

<!DOCTYPE html>  
<html>  
<head>  
    <title>Search</title>  
</head>  
<body>  
    <h1>Search</h1>  
    <form method="POST" action="/search">  
        <input type="text" name="query" placeholder="Enter your query">  
        <input type="submit" value="Search">  
    </form>  
</body>  
</html>

四、创建索引并插入数据

在开始搜索之前,我们需要创建一个Elasticsearch索引,并将数据插入到该索引中。在search_app.py文件中,添加以下代码:

if __name__ == "__main__":  
    from flask_migrate import Migrate, MigrateCommand  
    from flask_script import Manager  
    from flask_sqlalchemy import SQLAlchemy  
  
    # 创建数据库和模型  
    db = SQLAlchemy()  
    class SearchResult(db.Model):  
        id = db.Column(db.Integer, primary_key=True)  
        title = db.Column(db.String(80))  
        content = db.Column(db.String(120))  
        url = db.Column(db.String(120))  
  
    db.create_all()  
  
    # 创建Elasticsearch索引  
    elasticsearch.indices.create(index="my_index")  
  
    # 初始化迁移工具和命令行管理器  
    migrate = Migrate()  
    manager = Manager(usage="For database operations")  
    manager.add_command("db", MigrateCommand)  
  
    # 初始化迁移和数据库操作  
    migrate.init_app(app, db)  
  
    # 插入一些示例数据  
    for i in range(10):  
        db.session.add(SearchResult(title="Result " + str(i), content="This is the content of result " + str(i), url="http://example.com/result" + str(i)))  
    db.session.commit()

这个代码创建了一个简单的数据库模型,并使用Flask-SQLAlchemy将其与数据库连接。然后,它创建了一个Elasticsearch索引,并使用示例数据填充该索引。

五、运行应用程序和测试搜索功能

现在,我们可以运行应用程序并测试搜索功能了。在命令行中,使用以下命令启动应用程序:

python search_app.py runserver

应用程序将在本地启动,并在浏览器中打开默认的Web页面。在搜索框中输入查询字符串,并单击“搜索”按钮。应用程序将向Elasticsearch发送搜索请求,并在页面上显示结果。你可以尝试输入不同的查询字符串,并查看返回的结果。

六、总结

通过本文的介绍,你已经学会了如何使用Flask和Elasticsearch来搭建一个简单的搜索引擎。通过创建Flask应用程序、配置Elasticsearch连接、创建索引和插入数据等步骤,你可以轻松地构建一个灵活且可扩展的搜索引擎。你可以根据自己的需求进一步扩展和改进这个搜索引擎,例如添加更多功能、优化查询性能等。

 

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
6天前
|
API 数据库 数据安全/隐私保护
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
22 1
|
6天前
|
SQL 中间件 API
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】**Flask是Python的轻量级Web框架,以其简洁API和强大扩展性受欢迎。本文深入探讨了面试中关于Flask的常见问题,包括路由、Jinja2模板、数据库操作、中间件和错误处理。同时,提到了易错点,如路由冲突、模板安全、SQL注入,以及请求上下文管理。通过实例代码展示了如何创建和管理数据库、使用表单以及处理请求。掌握这些知识将有助于在面试中展现Flask技能。**
12 1
Flask框架在Python面试中的应用与实战
|
9月前
|
Python
【Flask实战】sqlalchemy和Flask-SQLAlchemy使用对比
【Flask实战】sqlalchemy和Flask-SQLAlchemy使用对比
|
9月前
|
前端开发 数据可视化 JavaScript
Python Flask Echarts数据可视化图表实战晋级笔记(4)ajax参数传递互动
Python Flask Echarts数据可视化图表实战晋级笔记(4)ajax参数传递互动
76 0
|
9月前
|
开发框架 数据可视化 应用服务中间件
【Flask实战】Apache+WSGI在内网Windows环境下部署Flask项目(艰难爬坑总结)
【Flask实战】Apache+WSGI在内网Windows环境下部署Flask项目(艰难爬坑总结)
|
9月前
|
存储 Python
【Flask实战】Flask知识点总结(三)— Flask-Login使用
【Flask实战】Flask知识点总结(三)— Flask-Login使用
|
9月前
|
存储 安全 数据库
|
9月前
|
数据库 索引 Python
|
9月前
|
数据可视化 Python
Python Flask Echarts数据可视化图表实战晋级笔记(3)Blueprint蓝图解决单文件url分发
Python Flask Echarts数据可视化图表实战晋级笔记(3)Blueprint蓝图解决单文件url分发
71 0
|
9月前
|
数据可视化 关系型数据库 MySQL
Python Flask Echarts数据可视化图表实战晋级笔记(2)@app.route装饰器的用法
Python Flask Echarts数据可视化图表实战晋级笔记(2)@app.route装饰器的用法
93 0