1、简介
Elasticsearch本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个Elasticsearch实例
单个Elasticsearch实例称为一个节点Node,一组节点构成一个集群Cluster
Index
Elasticsearch会索引所有字段,经处理后写入一个反向索引(Inverted Index),查找数据的时候,直接查找该索引。所以,Elasticsearch数据管理的顶层单位就叫做index(索引),其实就相当于MySQL、MongoDB等里面的数据库的概念
Document
Index里面单条的记录称为Document(文档),许多条Document构成了一个Index。Document使用JSON格式表示,同一个Index里面的Document,不要求有相同的结构(schema),但是最好保持相同,这样有利于提高搜索效率
Type
Document 可以分组,比如 weather 这个 Index 里面,可以按城市分组(北京和上海),也可以按气候分组(晴天和雨天)。这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤 Document,类似 MySQL 中的数据表,MongoDB 中的 Collection。
不同的 Type 应该有相似的结构(Schema),举例来说,id 字段不能在这个组是字符串,在另一个组是数值。这是与关系型数据库的表的一个区别。性质完全不同的数据(比如 products 和 logs)应该存成两个 Index,而不是一个 Index 里面的两个 Type(虽然可以做到)。
根据规划,Elastic 6.x 版只允许每个 Index 包含一个 Type,7.x 版将会彻底移除 Type。
Fields
即字段,每个 Document 都类似一个 JSON 结构,它包含了许多字段,每个字段都有其对应的值,多个字段组成了一个 Document,其实就可以类比 MySQL 数据表中的字段。
在 Elasticsearch 中,文档归属于一种类型(Type),而这些类型存在于索引(Index)中,我们可以画一些简单的对比图来类比传统关系型数据库:
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields
2、操作
在安装位置,在bin文件下,双击elasticsearch.bat:
双击之后,显示下面的界面:
3、代码
from datetime import datetime
from elasticsearch import Elasticsearch
es = Elasticsearch()
es.indices.create(index='my-index', ignore=400)
print(es.index(index='my-index', doc_type='test-type', id=42, body={'any': 'data', 'timestamp': datetime.now()}))
print(es.get(index='my-index',doc_type='test-type',id=42)['_source'])
后续会继续更新elasticsearch的学习情况