es是一个分布式的文档数据库,索引的文档都是以json序列化形式存贮的,而不是像关系型数据库那样是列数据行的形式存贮的。
在es 7.0之前,常把es和关系型数据库的名词做如下映射
es | mysql |
---|---|
index (索引) | datasource(数据库) |
type (类型) | table |
mapping | column |
document | row |
es的index相当于关系数据库的数据库,而type 相当于表,mapping表示某个type的字段的定义,document这相当于表的每条数据,
即一个index下面有多个type,多个type可以定义自己的mapping属性,而某个document则是一个json序列化后的数据
但在es7.0后,官方文档废弃type这层概念,理由是es同一个index下,不同的type,其实在都是根据_type元属性来区别的,在搜索的时候,根据_type来过滤,推荐同一个索引不同的type的mapping中字段要尽量相同,如果差异较大,则推荐定义不同的索引。文档的字段差异较少,有利于提高es的存贮空间的利用率和压缩率。而且不同的type中的mapping的相同名称的字段,在底层都存贮在同一个字段中。所以同名的字段的mapping必须相同否则会无法创建mapping。所以官方在7.0后,type不再被推荐使用。只有一个默认的type 是 “_doc”,即一个 index,一个type(默认_doc)。
1.如何和es交互
1.1 使用java client
es提供了java的sdk,可以通过java对es进行操作,java客户端分低级客户端,和高级客户端,还有已经不推荐使用的transport client。这些我们后续再细说。
2.1 使用restful api
es提供restful api接口,可通过http请求直接访问。
我们可以通过 curl,postman,kibana的dev-tools等工具轻易的和es进行交互。
例如curl请求格式如下
3.创建索引
**es的index我们可以预先定义好,包括索引的设置,mapping的定义,别名等。**也可以直接用默认的设置,直接添加文档,es会自动帮我们创建索引。帮我们定义mapping,但默认的不一定符合我们的需求。当然我们可以根据相关的api后续再去更改索引的配置
index的创建包括三部分:
settings:索引的基本配置,包括分片数,每个分片对应的复制数量,分词器等
mapping:属性的类型及其相关定义
aliases:索引别名的定义
这用kibana 的dev-tools工具,建立的一个简单的索引,它是一个简化的类似于curl的表达式。
查询我们刚刚创建的索引
GET my-index-000001
{
"my-index-000001" : {
"aliases" : {
},
"mappings" : {
"properties" : {
"title" : {
"type" : "text",
"analyzer"