ElaticSearch的基本概念Elasticsearch是基于Lucene的搜索服务器。 提供基于rest风格的web界面的分布式多用户功能全文搜索引擎。 我个人理解是基于rest风格的索引数据库。
接近实时(NRT Near Real Time )
Elasticsearch是一个接近实时的搜索平台。 即从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒内)
索引(index)
一个索引就是一个拥有几分相似特征的文档的集合例如,可以有顾客数据的索引、其他产品目录的索引、订购数据的索引。 索引由名称标识,且必须全部小写。 此外,在索引、搜索、更新和删除此索引中的文档时,也使用此名称。 索引类似于关系数据库中的数据库概念。 在一个集群中,如果你想的话,可以定义任意数量的索引。
类型(type)
在一个索引中,你可以定义一种或多种类型一种类型是你的索引的逻辑分类/划分,其含义完全由你决定。 通常定义具有一组公共字段的文档类型。 例如,假设您运营一个博客平台,并将所有数据存储在索引中。 通过该索引,可以为用户数据定义其他类型,也可以为博客数据定义其他类型。 当然,也可以为注释数据定义其他类型。类型类似于关系型数据库中Table的概念
NOTE: 在5.x版本以前可以在一个索引中定义多个类型,6.x之后版本也可以使用,但是不推荐,在7~8.x版本中彻底移除一个索引中创建多个类型
映射(Mapping)
映射是ES的重要内容之一,在它类似于传统关系型数据中table的schema,用于定义一个索引(index)中的类型(type)的数据的结构ES中,可以手动创建类型(相当于表)和映射(关联和模式),也可以采用缺省创建方法。 在缺省配置中,ES可以根据插入的数据自动创建类型及其映射。 映射主要包括字段名称、字段数据类型和字段索引类型
文档(document)
一个文档是一个可被索引的基础信息单元,类似于表中的一条记录例如,可以有某个员工的文档,也可以有某个商品的文档。 文档以轻量级数据交换格式JSON(JavaScriptobjectnotation )表示。
电子搜索概念关系图
Kibana基本操作Kibana是Elasticsearch的开源分析和可视化平台,使用Kibana可以查询、查看并与存储在ES索引的数据进行交互操作,使用Kibana可以执行高级数据分析,以图表、表格、地图的形式表示数据。
(首先启动了ES服务,启动了Kibana )
索引基本操作创建索引时,把类型和映射一并创建
#创建索引PUT /wyc#是否显示所有索引GET /_cat/indices? v#删除索引DELETE /wyc#删除所有索引仔细使用:ElasticSearch会附带两个索引。 删除kibana客户端将无法使用,只能重新启动]DELETE /*类型(type )基本操作创建类型
:要使用这种方法创建类型,请注意索引不存在
#型操作驻留在一个索引中的型式put/EMS(mappings ) : (EMP ) : ) properties : ) id ) : ) type ) 3360 ) integer
mappimgs:对映射、固定格式或类型的数据结构施加限制,从而在添加文档时产生限制
emp :对于类型名称,建议在ES6之后创建索引以创建类型
properties:将pddhh添加到属性、固定格式或类型创建的属性中
“id”“name”…等等:属性名称
“type”:根据固定写法、制约类型、属性可以写不同的类型
mapping type :http://www.Sina.com /
text , keyword , date ,integer, long , double , boolean or ip
#语法GET /索引名称/_m
apping# 比如GET /ems/_mapping 文档(document)基本操作添加文档
如果不指定id,ES默认会生成一个随机id,后面操作文档都根据此id
这也是为什么在给类型添加属性时,一般不添加id属性
获取文档
# 语法 GET /索引/类型/idGET /ems/emp/1结果:{ "_index" : "ems", "_type" : "emp", "_id" : "1", "_version" : 1, "_seq_no" : 0, "_primary_term" : 1, "found" : true, "_source" : { "eid" : 2021326, "name" : "测试ES" }}删除文档
# 语法 DELETE /索引/类型/idDELETE /ems/emp/1结果:{ "_index" : "ems", "_type" : "emp", "_id" : "1", "_version" : 2, "result" : "deleted", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 1, "_primary_term" : 1}更新文档
不保留原始数据(先删除后插入) POST /ems/emp/1{ "name":"kkdgtx"} 保留原始数据更新,且可添加新字段这种方式,type并没有新增的属性,但你添加的时候,ES会给你进行相应的匹配 POST /索引/类型/id/_update { "doc":{ "属性名":"值" } }POST /ems/emp/1/_update{ "doc":{ "eid":555555, "name":"tetetetest" }}结果:{ "_index" : "ems", "_type" : "emp", "_id" : "1", "_version" : 2, "_seq_no" : 5, "_primary_term" : 1, "found" : true, "_source" : { "eid" : 555555, "name" : "tetetetest" }} 根据script脚本进行更新[使用较少] POST /ems/emp/1/_update{ "script": "ctx._source.eid += 8888"} 批量操作
有时候,想要同时添加文档、删除文档、修改文档、索引文档组合进行
使用关键词 _bulk
操作非原子性的,且弱化了事务