3.1. 索引
索引(index)是 Elasticsearch对逻辑数据的逻辑存储,所以它可以分为更小的部分。
可以把索引看成关系型数据库的表,索引的结构是为快速有效的全文索引准备的,特别是它不存储原始值。
Elasticsearch可以把索引放在一台机器或者分散在多台服务器上,每一个索引有一个或者多个分片(shard),每个分片可以有多个副本(replica)。
3.2. 文档
存储在Elasticsearch中的主要实体叫做 文档(document)。用关系型数据库来类比的话,一个文档相当于数据库表中的一行记录。
Elasticsearch和MongoDB中的文档类似,都可以有不同的结构,但是Elasticsearch中的文档,相同的字段必须有相同的类型。
文档由多个字段组成,每个字段可能多次出现在一个文档里,这样的字段叫多指字段(multivalued)。
每个字段的类型,可以是文本、数值、日期等。字段类型也可以是复杂类型,一个字段包含其他子文档或者数组。
3.3. 映射
所有文档写进索引之前都会进行分析,如何将输入的文本分割为字条,哪些字条又会被过滤,这种行为叫映射(mapping)。一般由用户自定义规则。
文档类型
在Elasticsearch中,一个索引对象可以存储很多不同用途的对象。例如,一个博客应用程序可以保存文章和评论
每个文档有不同的接口。
不同的文档类型不能为相同的属性设置不同的类型。例如,在同一个索引中的所有文档类型中,一个叫title的字段必须具有相同的类型。
3.4 RESTful API
在Elasticsearch 中,提供了功能丰富的RESTful API的操作,包括基本的CURD,创建索引,删除索引操作。
3.4.1 创建非结构化索引
在Lucene中,创建索引是需要定义字段名称以及字段的类型的,在Elasticsearch中提供了非结构化的索引,就是不
创建成功
3.5 保存数据
说明:非结构化的索引,不需要事先创建,直接插入数据默认创建索引。
不指定id插入数据:
响应
自动生成id : "_id": "LgOccnEBK3PERGtN9-n7"
3.6 修改数据
在 elasticsearch 中,文档型数据是不会修改的,但是可以通过覆盖的方式进行更新。
在已有的数据中:将id为1001 的 name 改为 李四,age 改为30,sex 改为 女
返回结果:
此时,数据修改(覆盖成功)
现在还有一个问题,可以实现局部更新吗?-- 可以的
上面不是说文档型数据不支持更新吗?其实是这样的:
在内部依然会查询到这个数据,然后进行覆盖操作,步骤如下:
1).从旧文档中检索数据JSON
2) . 修改它
3) . 删除旧文档
4) . 索引新文档
示例:
此时数据局部更新成功
3.7 删除数据
删除数据时,只需要发起 DELETE 请求即可
如果删除一条不存在的数据,则会响应404;
说明:
3.8 搜索数据
示例:根据id搜索数据
示例:查询所有数据
示例:关键字查询,查询年龄等于30的用户
原始数据
传参
结果: 检索出 age=20 的两个人,王五和李四