ES作为一个索引及搜索服务,对外提供丰富的REST接口,快速入门部分的实例使用head插件来测试,目的是对ES 的使用方法及流程有个初步的认识。
索引(名词):ES是基于Lucene构建的一个搜索服务,它要从索引库搜索符合条件索引数据。
索引(动词):索引库刚创建起来是空的,将数据添加到索引库的过程称为索引。
{ "settings":{ "index":{ "number_of_shards":1, "number_of_replicas":0 } } }
number_of_shards: 设置分片的数量,在集群中通常设置多个分片,表示一个索引库将被拆分为别存储在不同的节点,提高了Es的处理能力和高可用性,这里是单机环境设置为1
number_of_replicas: 设置副本的数量,设置副本是为了提高Es的高可用性,单机环境设置为0
在索引中每个文档都包括一个或多个field,创建映射就是向索引库中创建field的过程,下边是document和field与关系数据库的概念类笔
文档----> Row记录;字段(Field)---->colums列
注意:6.0之前的版本都有type类型概念,type相当于关系数据库的表,ES官方将在9.0版本中彻底删除type
上面讲的创建索引相当于数据库中的数据库还是表
- 如果相当于数据库就表示一个索引库可以创建很多不同类型的文档
- 如果相当于表,就表示一个索引库只能存储类型相同的文档,ES官方建议,在一个索引库中只存储相同类型的文档
#Post
ip:端口/索引库名称/类型名称/_mapping
#id 用户可以不填写,如不传ES会自动生成ID
#Put/Post:
ip:端口/索引库名称/类型名称/id
# Get
ip:端口/索引库名称/type/id
ip:端口/索引库名称/type/search
#Get
ip:端口/索引库名称/type/search?q=name:spring
{
"took": 40,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 2.0495672,
"hits": [
{
"_index": "xc_course",
"_type": "doc",
"_id": "4028e58161bcf7f40161bcf8b77c0000",
"_score": 2.0495672,
"_source": {
"expires": null,
"timestamp": "2019-04-11T22:57:24.000Z",
"price": 0.009999999776482582,
"name": "spring cloud实战",
"@version": "1",
"valid": "204002",
"st": "1-3-2",
"studymodel": "201001",
"@timestamp": "2019-04-11T05:52:00.063Z",
"charge": "203002",
"pic": "group1/M00/00/01/wKhlQFqO2HqAA6sPAAArlhJed-w088.jpg",
"grade": "200003",
"teachplan": "微服务架构入门 为什么要使用微服务:单体架构的特点 为什么要使用微服务:微服务的优缺点 spring cloud 基础入门 为什么要选择spring cloud? 为什么springcloud要设计一套新的版本升级规则? 实战-Spring Boot 为什么越来越多的开发者选择使用spring boot?它解决了什么问题? spring boot的入门例子 注册中心Eureka 微服务架构为什么需要注册中心,它解决了什么问题? 一个Eureka注册中心的入门例子 ",
"price_old": null,
"mt": "1-3",
"end_time": null,
"id": "4028e58161bcf7f40161bcf8b77c0000",
"qq": "54354353",
"users": "所有人",
"teachmode": "",
"description": "本课程主要从四个章节进行讲解: 1.微服务架构入门 2.spring cloud 基础入门 3.实战Spring Boot 4.注册中心eureka。",
"start_time": null
}
}
]
}
}
core | |
---|---|
String | text and keyword |
Numeric dataTypes | long,integer,short,byte,double,float,haif_float,scaled_float |
Date dataType | date |
Boolean dataType | boolean |
Binary dateType | binary |
Range dataTypes | inter_range,float_range,long_range,double_range,date_ra |
字符串包括text和keyword两种类型,使用analyzer属性可以指定字符串分词方式
"name":{
"type":"text",
"analyzer":"ik_max_word"
}
指定在索引和搜索时,都使用ik_max_word分词器,如果想单独定义搜索时使用的分词器则可以通过search_analyzer属性
"name":{
"type":"text",
"analyzer":"ik_max_word",
"search_analyzer": "ik_samrt"
}
听过index属性设置字段是否索引,默认index=true,即进行索引,只有进行索引才可以从索引库搜索到;但是也由一些内容不适合索引,比如:商品图片地址
"pic":{
"type":"text",
"index":"false"
}
是否在source之外存储,每个文档索引后会在ES中保存一份原始文档,存放在“_source”中,一般情况下不需要设置store为true,因为_source中已经有一份原始文档了
注意:keyword字段为关键字,通常搜索关键字按照整体搜素,所以在创建索引时,指定不进行分词
"name":{ "type":"keyword" }
日期类型不用设置分词器.通常日期类型的字段用于排序;通常使用format字段设置日期格式
{
"properties":{
"time":{
"type":"dtae",
"format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd"
}
}
}
"price":{
"type":"scaled_float",
"scaling_factor":100
}
因为比例因子为100,如果我们输入的价格为23.45则ES会将23.45乘以100存储到ES中;如果输入的价格是23.456;ES会将23.456乘以100再取一个接近的原始值的数,得出2346;使用比例因子的好处是整型比浮点型更容易压缩,节省磁盘空间