全文搜索引擎ElasticSearch
全文搜索引擎 ElasticSearch
1. 介绍
ElasticSearch 简称 ES。
先来看它的用途:如果只是在多个机器同步,存储和检索大量数据,它与数据库的差别在哪儿,为什么非要使用 ES 呢?
ES 是目前全文搜索引擎的首选。全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。简单地说它的优势在于文本检索。ES 还可搭建成集群,有良好的扩展性。
如果把 ES 和数据库相比,ES 中包含多个索引 index(相当于数据库中的库),索引又包括多个类型 type(相当于数据库中的表)。
Kibana 是一个开源的分析与可视化平台,设计出来用于和 Elasticsearch 一起使用的。
2. ES 环境搭建
(1) 安装 8 以上的 Java 版本
ES 是由 java 编写的,所以先要安装与其版本匹配的 JAVA 工具
在以下网址下载 Java8 版本:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
1 | $ cd /usr/lib/jvm/ |
用以上方法设置可以省去手动设置 JAVA_HOME 等环境变量。
(2) 安装 ES 和 Kibana
安装时,需要考虑 ES 和它的辅助软件 kibana 的版本匹配,于是在网站 https://www.elastic.co/downloads,下载了最新版本的 deb 包(目前最新为 6.3.2)
1 | $ sudo dpkg -i elasticsearch-6.3.2.deb # ubuntu系统下安装 |
(3) 配置 ES
1 | $ sudo vi /etc/elasticsearch/elasticsearch.yml # 编辑配置文件,也可以通过该配置文件,配置ES集群(一个设成master node, 多个data node,使用同一集群名) |
(4) 启动 ES
1 | $ sudo service elasticsearch restart # 重启ES |
(5) 配置 Kibana
1 | $ sudo vi /etc/kibana/kibana.yml # 修改配置文件 |
(6) 启动 Kibana
1 | $ sudo service kibana restart |
此时在浏览器中,打开 http://127.0.0.1:5601,即可看到 kibana 已启动
(7) 一次性安装 ES 和 Kibana
1 | $ docker pull nshou/elasticsearch-kibana |
目前下载的是较新的 7.16.2 版本
3. 使用 curl 命令访问 ES
(1) 查看服务状态(也可以在浏览器中查看)
1 | $ curl 'localhost:9200/_cat/health?v' |
(2) 查看当前的 Node 节点
1 | $ curl 'localhost:9200/_cat/nodes?v' |
(3) 新建一个 index(类似于数据库操作中的建库)
1 | $ curl -XPUT 'localhost:9200/test_1' |
此时在浏览器输入 http://127.0.0.1:9200/test_1?pretty,可看到具体信息。
(4) 查看当前所有 index
1 | $ curl 'localhost:9200/_cat/indices?v' |
(5) 向 index 中添加数据
1 | $ curl -XPOST http://localhost:9200/test_1/product/ -d '{"author" : "Jack", , "age": 32}' |
如果报错 406,请加入参数 -H,如下:
1 | $ curl -XPOST http://localhost:9200/test_1/product/ -H 'Content-Type: application/json' -d '{"author" : "Xie Yan"}' |
插入的 index 是 test_1,type 是 product,此处可以看到,输入 ES 数据的格式是相当灵活的,它以 key-value 的方式存取,不像数据库中固定的字段。
(6) 查询所有数据
1 | $ curl -XPOST 'localhost:9200/test_1/_search' -d ' { "query": { "match_all": {} } }' |
(7) 条件查询
1 | $ curl -XGET http://localhost:9200/test_1/_search?q=age:32 |
##4. 使用 Kibana 查看 ES 数据
浏览器访问 http://127.0.0.1:5601,在 Management-> Elasticsearch 中即可以查看当前的 index 和 type,及其它们的内容,以及进一步分析。
5. 用 Python 访问 ES 数据
(1) 安装 python 支持库
1 | $ sudo pip install elasticsearch |
(2) 代码
1 | from elasticsearch import Elasticsearch |
(3) 说明
可以在 body 中加入一些用 json 串描述的查询条件和需要的字段,条件最多 1024 个,在 size 中可设置返回条目的多少,用此方法查询最多能返回一万条。
如果超过一万条,用 helpers.scan,详见参考的第三部分
如果只关心其中某几个字段,可以 body 中指定 "_source": [' 字段 1',' 字段 2'...]。
6. 参考
(1) ES 与传统数据库的比较
https://blog.csdn.net/playgrrrrr/article/details/79008124
(2) 搭建 Elasticsearch 5.4 分布式集群
https://blog.csdn.net/napoay/article/details/52202877
(3) ElasticSearch scan 和 scroll 功能 python 实现
https://blog.csdn.net/xsdxs/article/details/72876703