【ElasticaSearch】快速入门

快速入门

创建索引库

ES作为一个索引及搜索服务,对外提供丰富的REST接口,快速入门部分的实例使用head插件来测试,目的是对ES 的使用方法及流程有个初步的认识。

关于索引这个语:

索引(名词):ES是基于Lucene构建的一个搜索服务,它要从索引库搜索符合条件索引数据。

索引(动词):索引库刚创建起来是空的,将数据添加到索引库的过程称为索引。

下边介绍两种创建索引库的方法,它们的工作原理是相同的,都是客户端向ES服务发送命令
  1. 使用postman或者kibana 创建:put http://localhost:9200/索引库名称
{ "settings":{ "index":{ "number_of_shards":1, "number_of_replicas":0 } } }
  1. 使用head插件创建

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
上面讲的创建索引相当于数据库中的数据库还是表

  1. 如果相当于数据库就表示一个索引库可以创建很多不同类型的文档
  2. 如果相当于表,就表示一个索引库只能存储类型相同的文档,ES官方建议,在一个索引库中只存储相同类型的文档
创建映射语法
#Post
ip:端口/索引库名称/类型名称/_mapping

创建文档

#id 用户可以不填写,如不传ES会自动生成ID
#Put/Post:
ip:端口/索引库名称/类型名称/id

搜索文档

根据id查找
# Get
ip:端口/索引库名称/type/id
查询所有记录
ip:端口/索引库名称/type/search
查询名称中包括spring的关键字
#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
                }
            }
        ]
    }
}
took: 本次操作花费的时间,单位为毫秒
time_out: 请求超时
_shards: 说明本次操作共搜索操作了那些分片
hits: 搜索命中记录
hit.total: 符合条件的文档的总数
hit.hits:匹配度较高的请N个文档
hit.max_score: 文档匹配得分,这里为最高分
_score: 每个文档都有一个匹配得分,按照降序排列
_source: 显示了文档原始显示内容

常见映射类型

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之外存储

是否在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"
		}
	}
}
数值类型
  1. 尽量选择范围小的类型,提高搜索效率
  2. 对于浮点数尽量用比列因子,比如一个价格字段,单位为元,我们将比例因子设置为100;这样在ES中会按分 存储,映射如下:
"price":{
	"type":"scaled_float",
	"scaling_factor":100
}

因为比例因子为100,如果我们输入的价格为23.45则ES会将23.45乘以100存储到ES中;如果输入的价格是23.456;ES会将23.456乘以100再取一个接近的原始值的数,得出2346;使用比例因子的好处是整型比浮点型更容易压缩,节省磁盘空间

你可能感兴趣的:(【ElasticaSearch】快速入门)