一、安装
Mac
安装方法:
brew install elasticsearch
Linux
的安装方法参见:elasticsearch: 权威指南
安装完成后,运行elasticsearch
:
elasticsearch
会看到一堆的输出,如果最后看到:
[2019-09-04T10:12:12,884][INFO ][o.e.n.Node ] [E2j6wyc] started
说明,elasticsearch
正常运行了。elasticsearch
默认会在 9200
端口上运行,我们打开浏览器访问http://localhost:9200/
就可以看到类似内容:
{
"name": "E2j6wyc",
"cluster_name": "elasticsearch_didi",
"cluster_uuid": "mQg77w-QQmGH07O6HXrFUw",
"version": {
"number": "6.8.2",
"build_flavor": "oss",
"build_type": "tar",
"build_hash": "b506955",
"build_date": "2019-07-24T15:24:41.545295Z",
"build_snapshot": false,
"lucene_version": "7.7.0",
"minimum_wire_compatibility_version": "5.6.0",
"minimum_index_compatibility_version": "5.0.0"
},
"tagline": "You Know, for Search"
}
如果看到这个内容,就说明 elasticsearch
安装并启动成功了,这里显示我的 elasticsearch
版本是 6.8.2
版本,版本很重要,以后安装一些插件都要做到版本对应才可以。
二、几个重要概念
1、索引(index
)
索引(index
)就是一个有相似特征的文档的集合,es
把数据存储到一个或多个索引中。通常index
是一个比较大的分类,比如按照不同的客户,或者不同的产品,或者不同的时间戳。
通常构造index
的时候需要考虑好分类的粒度,因为如果后面想要批量删除的话基本单位是索引。如果构造的index
分类粒度太大,那么批量删除的时候将会变得很麻烦。
如果是采用ES
来搭建实时日志搜索平台,那么通常建议index
按照时间戳来进行命名,因为这样的话可以设置超过几天的日志全部删除,清理磁盘空间。
2、文档(document
)
文档(document
)是es
中存储数据的实体,它是可以被索引的基本单元。每一个文档都以json
格式表示,每一个索引可以任意多个文档。
简单来说就是**文档其实就是真实的每一条的存储的数据,比如每条以json
格式表示的日志。**每一个文档物理上存在一个索引中,但文档必须有一个文档类型(type
)。
3、类型(type
)
类型(type
)是索引之下的逻辑分区,相对index
更细的分类粒度。比如如果index
以日期命名,那么type
可以以具体的客户命名。然后每一个客户下面,又有很多的文档实体。
4、id
每一个文档实体,ES
会自动为其创建一个唯一的id,比如**“AV8tQS119lFHJS7Mv7v8
”**。
这里不太重要不需要关注,但有一点需要注意,日志的字段不能有id这个字段,否则会跟自动创建的id
冲突,导致可能插入数据失败。
5、Node
和 Cluster
elasticsearch
本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 elasticsearch
实例。
单个 elasticsearch
实例称为一个节点(Node
)。一组节点构成一个集群(Cluster
)。
三、Python3
操作 es
实战
理解了上面的几个概念,然后就可以开始真正使用es
了。其实可以简单的把es
类比为一个数据库,可以执行插入,查询,更新,删除等操作。
1、安装 es
的 python
库:
pip3 install elasticsearch
安装完成后,进行一下简单的测试:
import requests
res = requests.get('http://127.0.0.1:9200')
print(res.json())
看到如下输出,说明elasticsearch
按住成功,且正常工作。
{
'name': 'E2j6wyc', 'cluster_name': 'elasticsearch_didi', 'cluster_uuid': 'mQg77w-QQmGH07O6HXrFUw', 'version': {
'number': '6.8.2', 'build_flavor': 'oss', 'build_type': 'tar', 'build_hash': 'b506955', 'build_date': '2019-07-24T15:24:41.545295Z', 'build_snapshot': False, 'lucene_version': '7.7.0', 'minimum_wire_compatibility_version': '5.6.0', 'minimum_index_compatibility_version': '5.0.0'}, 'tagline': 'You Know, for Search'}
2、使用
(1)创建 ES
实例
import elasticsearch
es = elasticsearch.Elasticsearch([{
'host': '127.0.01', 'port': 9200}])
(2)创建 index
from elasticsearch import Elasticsearch
es = Elasticsearch([{
'host': '127.0.01', 'port': 9200}])
result = es.indices.create(index='news', ignore=400) # 创建名为 news 的 index
print(result)
如果创建成功,会返回如下结果:
{
'acknowledged': True, 'shards_acknowledged': True, 'index':