新闻搜索
I. 搜索功能分析
本节我们来完成新闻搜索功能, 首先让我们来思考一下,要做一个通过关键词搜索文章的功能,需要搜索哪些字段,以及使用什么技术方案呢?
既然我们是准备做新闻博客网站, 那我们就可以拿同类型网站的做一下对比, 例如CSDN, 简书, 博客园等, 这些常见的博客网站其主要覆盖的搜索字段有:
- 标题
- 内容
- 作者
实现这些字段检索的技术方案有以下两种:
- mysql的模糊查询
%like%
- 优点:实现起来简单
- 缺点:数据量比较大的情况下,查询效率极低
- 全文检索引擎
- 优点:专业的全文检索引擎,效率高
- 缺点:实现起来比较复杂
本项目选择使用过全文检索引擎。自行实现django框架和全文检索引擎的代码比较麻烦,抱着不重复造轮子的原则,这里我们选用django的第三方包djangohaystack
。它支持多种全文检索引擎,本项目选择最流行的全文检索引擎之一elasticsearch
。
II. elasticsearch介绍
elasticsearch 原理:http://developer.51cto.com/art/201904/594615.htm
工作原理示意图
- 首先来看图中, 用户将
全文搜索
的请求发送至django, 即输入搜索内容 - 全文搜索需要
分词
和模糊查询
, 这些操作在mysql中也可以使用, 但如果遇到数据量大的项目, 效率会很低, 因此, 就需要借助搜索引擎elasticsearch
- 要实现查询, 那么我们的django需要连接
mysql
和elasticsearch
:- 连接mysql使用的是
mysqlclient
- 连接elasticsearch使用的是
django-haystack
, 以及python的es驱动
- 连接mysql使用的是
- elasticsearch会去到mysql中
获取数据
, 然后进行索引
, 并储存到它自己那里 - 然后django就会利用haystack到elasticsearch中查询想要的数据, 即执行搜索
- es查询到后返回给haystack(haystack是属于django项目中的一个从外部引入的app)
- haystack会返回给django框架, 然后django再展示给用户看, 即展示搜索结果
III. docker介绍与安装
1>docker介绍
1.1>什么是docker?
- 简化创建,部署,运行应用程序的一个工具
- 打包应用程序所需的库和依赖环境
- 精简的虚拟机
1.2>为什么使用docker?
流行,方便,强大
1.3>docker vs 虚拟机
1.4>docker架构
-
架构
- 客户端
- 守护进程
- 仓库
-
docker 对象
- 镜像 精简的linux
- 容器
- 服务
-
docker Hub
-
安装
lsb_release -a # 查看系统信息 uname -a # 查看位数
- 1
- 2
- 1
- 2
2>ubuntu下安装
如果是第一次安装,你需要先添加docker的源然后再安装
2.1>添加阿里云源
- 百度搜索"阿里云源"
- 选择Ubuntu然后复制源链接
- 桌面创建一个txt文件, 重命名为
sources.list
- 使用NotePad++或是pycharm打开, 粘贴源链接, 保存
- 粘贴文件到linux的家目录
cd /etc/apt/
- 备份原有的
sources.list
, 使用命令:sudo cp sources.list sources.dbk.list
- 然后
sudo rm sources.list
, 再将你刚才创建的sources.list
拷贝到/etc/apt/
- 运行命令:
sudo apt-get update
, 刷新源 - 如果有问题则
sudo apt-get upgrade
更新系统, 然后再刷新源
2.2>安装证书
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
- 1
- 1
2.3>添加官方GPGkey
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 1
- 1
2.4>添加docker源
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- 1
- 1
3>安装 docker ce
3.1>更新包索引
$ sudo apt-get update
- 1
- 1
3.2>安装docker
(这个可能会很久)
$ sudo apt-get install docker-ce
- 1
- 1
3.3>检测是否安装成功
$ sudo docker run hello-world
- 1
- 1
安装成功会出现如下输出:
Hello from Docker!
This message shows that your installation appears to be working correctly.
- 1
- 2