Rest风格API
elasticsearch提供了Rest风格的API,即http请求接口
1. 基本概念
Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的。
索引(indices) | Databases数据库 |
---|---|
类型(type) | Table数据库 |
文档(Document) | Row行 |
字段(Field) | Columns |
- 索引库(indices):indices是index的复数,代表许多的索引
- 类型(type):类型是模拟mysql中的table概念,一个索引库下可以有不同类型的索引,比如商品索引,订单索引,其数据格式不同。不过这会导致索引库混乱,因此未来版本中会移除这个概念。
- 文档(document):存入索引库原始的数据。比如每一条商品信息,就是一个文档。
- 字段(field):文档中的属性。
- 映射配置(mappings):字段的数据类型、属性、是否索引、是否存储等特性。
2. 索引操作
2.1 创建索引:put请求
- kibana的安装使用看这个博客:elasticsearch入门(IKibana安装)
- 使用kibana创建索引:
- 请求方式:PUT
- 请求路径:索引库名
- 请求参数:json格式
put book
{
"settings":{
"number_of_shards":1, /*分片数量*/
"number_of_replicas":0 /*副本数量*/
}
}
2.2 查看索引:get请求
get 索引库名
- 我们可以使用*来查询所有索引库
2.3 删除索引:delete请求
delete 索引库名
3.映射配置
创建索引库,就相当于mysql创建“数据库”。接着我们来配置映射,相当于创建“表结构”。
- 在ElasticSearch中,我们常配置:
- 字段的数据类型
- 是否要存储
- 是否要索引
- 是否分词
- 分词器是什么
3.1 创建映射关系
PUT /索引库名/_mapping/类型名称
{
"properties": {
"字段名": {
"type": "类型",
"index": true,
"store": true,
"analyzer": "分词器"
}
}
}
- 类型名称:基本概念中所说的type,类似于数据库中的表
- 字段名: 类似于数据库中的列名。
- type:类型,可以是text、long、short、date、integer、object等
- index:是否索引,默认为true
- store:是否存储,默认为false
- analyzer:分词器,这里的‘ik_max_word’ 即使用ik分词器
- 字段名: 类似于数据库中的列名。
- 实例
/* 1.先创建索引 */
put czxy
/* 2.创建映射关系 */
put czxy/_mapping/book
{
"properties": {
"title": {
"type": "text",
"analyzer": "ik_max_word"
},
"images": {
"type": "keyword",
"index": "false"
},
"price": {
"type": "float"
}
}
}
3.2 查看映射关系
get /索引库名/_mapping
3.3 字段属性详解
1) type
- Elasticsearch中支持的数据类型非常丰富
- String 类型,又分为两种:
- text:可分词,不可参与聚合
- keyword:不可分词,数据会作为完整字段进行匹配,可以参与集合
- Numerical:数值类型,分两类:
- 基本数据类型:long、interger、short、byte、double、float、half_float
- 浮点数的高进度类型:scaled_float
- 需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
- Date:日期类型
- elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。
- String 类型,又分为两种:
2)index
index影响字段的索引情况
- true:字段会被索引,则可以用来进行搜索。默认值就是true;
- false:字段不会被索引,不能用来搜索。
index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。但是有些字段是我们不希望被索引的,比如商品的图片信息,就需要手动设置index为false。
3)store
是否将数据进行额为存储。
Elasticsearch在创建文档索引时,会将文档中的原始数据备份,保存到一个叫做‘_source’的属性中。而且我们可以通过过滤‘ _source’来选择哪些要显示,哪些不显示。
而如果设置store为true,就会在‘_source’以外额为存储一份数据,多余,因此一般我们都会将store设置为false,事实上,store的默认值就是false。
备注(展示无查询操作与聚合操作)后期更新
来源:oschina
链接:https://my.oschina.net/u/4284277/blog/3164941