1、
创建索引库
ES
的索引库是一个逻辑概念,它包括了分词列表及文档列表,同一个索引库中存储了相同类型的文档。它就相当于
MySQL
中的表,或相当于
Mongodb
中的集合。
关于索引这个语:
索引(名词):
ES
是基于
Lucene
构建的一个搜索服务,它要从索引库搜索符合条件索引数据。
索引(动词):索引库刚创建起来是空的,将数据添加到索引库的过程称为索引。
下边介绍两种创建索引库的方法,它们的工作原理是相同的,都是客户端向
ES
服务发送命令。
1
)使用
postman
或
curl
这样的工具创建:
put
http://localhost:9200/
索引库名称
{
"settings":{
"index":{
"number_of_shards":1,
"number_of_replicas":0
}
}
}
number_of_shards
:
设置分片的数量,在集群中通常设置多个分片,表示一个索引库将拆分成多片分别存储不同
的结点,提高了
ES
的处理能力和高可用性,入门程序使用单机环境,这里设置为
1
。
number_of_replicas
:设置副本的数量,设置副本是为了提高
ES
的高可靠性,单机环境设置为
0.
如下是创建的例子,创建
xc_course
索引库,共
1
个分片,
0
个副本:
2)使用head插件创建
效果如下:
2 、
创建映射
1)
概念说明
在索引中每个文档都包括了一个或多个
field
,创建映射就是向索引库中创建
field
的过程,下边是
document
和
field
与关系数据库的概念的类比:
文档(
Document
)
----------------Row
记录
字段(
Field
)
-------------------Columns
列
注意:
6.0
之前的版本有
type
(类型)概念,
type
相当于关系数据库的表,
ES
官方将在
ES9.0
版本中彻底删除
type
。
上边讲的创建索引库相当于关系数据库中的数据库还是表?
1
、如果相当于数据库就表示一个索引库可以创建很多不同类型的文档,这在
ES
中也是允许的。
2
、如果相当于表就表示一个索引库只能存储相同类型的文档,
ES
官方建议 在一个索引库中只存储相同类型的文
档。
2)创建映射
我们要把课程信息存储到
ES
中,这里我们创建课程信息的映射,先来一个简单的映射,如下:
发送:
post
http://localhost:9200/
索引库名称
/
类型名称
/_mapping
创建类型为
xc_course
的映射,共包括三个字段:
name
、
description
、
studymondel
由于
ES6.0
版本还没有将
type
彻底删除,所以暂时把
type
起一个没有特殊意义的名字。
post
请求:
http://localhost:9200/xc_course/doc/_mapping
表示:在
xc_course
索引库下的
doc
类型下创建映射。
doc
是类型名,可以自定义,在
ES6.0
中要弱化类型的概念,
给它起一个没有具体业务意义的名称。
{
"properties":{
"name":{
"type":"text"
},
"description":{
"type":"text"
},
"studymodel":{
"type":"keyword"
}
}
}
映射创建成功,查看head界面:
3、创建文档
ES中的文档相当于MySQL数据库表中的记录。
发送:
put
或
Post
http://localhost:9200/xc_course/doc/id
值
(如果不指定
id
值
ES
会自动生成
ID
)
http://localhost:9200/xc_course/doc/4028e58161bcf7f40161bcf8b77c0000
{
"name":"Bootstrap开发框架",
"description":"Bootstrap是由Twitter推出的一个前台页面开发框架,在行业之中使用较为广泛。此开发框架包 含了大量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长页面开发的程序人员)轻松的实现一个不受浏览器限制的 精美界面效果。",
"studymodel":"201001"
}
使用postman测试:
通过
head
查询数据:
4 、
搜索文档
1
、根据课程
id
查询文档
发送:
get
http://localhost:9200/xc_course/doc/4028e58161bcf7f40161bcf8b77c0000
使用
postman
测试:
2
、查询所有记录
发送
get
http://localhost:9200/xc_course/doc/_search
3
、查询名称中包括
spring
关键字的的记录
发送:
get
http://localhost:9200/xc_course/doc/_search?q=name:bootstrap
4
、查询学习模式为
201001
的记录
发送
get
http://localhost:9200/xc_course/doc/_search?q=studymodel:201001
5、查询结果分析
分析上边查询结果:
{
"took":1,
"timed_out":false,
"_shards":{
"total":1,
"successful":1,
"skipped":0,
"failed":0
},
"hits":{
"total":1,
"max_score":0.2876821,
"hits":[
{
"_index":"xc_course",
"_type":"doc",
"_id":"4028e58161bcf7f40161bcf8b77c0000",
"_score":0.2876821,
"_source":{
"name":"Bootstrap开发框架",
"description":"Bootstrap是由Twitter推出的一个前台页面开发框架,在行业之中使用较 为广泛。此开发框架包含了大量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长页面开发的程序人员)轻松的实现 一个不受浏览器限制的精美界面效果。",
"studymodel":"201001"
}
}
]
}
}
took:本次操作花费的时间,单位为毫秒。
timed_out
:请求是否超时
_shards
:说明本次操作共搜索了哪些分片
hits
:搜索命中的记录
hits.total
: 符合条件的文档总数
hits.hits
:匹配度较高的前
N
个文档
hits.max_score
:文档匹配得分,这里为最高分
_score
:每个文档都有一个匹配度得分,按照降序排列。
_source
:显示了文档的原始内容。