一、 ElasticSearch在window环境下的安装
- 访问ElasticSearch的官方地址(https://www.elastic.co/cn/)
- 下载ElasticSearch的windows版本安装解压
- 解压完成之后,进入bin目录下,启动elasticsearch.bat文件
- 启动完成之后,在浏览器输入localhost:9200,出现如下即表示启动成功
二、正排索引和倒排索引
一张表的数据如下
id | content |
---|---|
1 | his name is tom |
2 | her name is lisa |
- 正排索引
查询指定的tom关键字,对整张表中的content中的所有字进行查询,是否与关键字相匹配,如果匹配的上,则查找该对应content的id,使用id进行数据的查询,该方式为正排索引 - 倒排索引
关键字 | id |
---|---|
tom | 1 |
lisa | 2 |
name | 1,2 |
is | 1,2 |
将content字段中的所有的所有内容进行划分,通过指定的关键字,找到对应的id,再通过id匹配数据,这种方式称为倒排索引
三、ElasticSearch中数据格式
ElasticSearch是面向文档型数据库,一条数据就是一个文档。
将ElasticSearch里存储文档的数据和关系型数据库Mysql存储数据概念进行对比
ElasticSearch中的Index可以看做是一个库,而Types相当于表,Documents则相当于表的行,这里面Types的概念已经被弱化了,ElasticSearch6.x中,一个index下面只能包含一个types,但是ElasticSearch7.x中,types的概念已经被移除了
四、ElasticSearch基本操作
- 创建索引
发送put请求到localhost:9200上,后面拼接所需要创建的索引的名称。比如发送localhost:9200/shopping的put请求则创建的是名为shopping的索引 - 查询索引
发送get请求到localhost:9200上,后面拼接所需要查询的索引的名称。比如发送localhost:9200/shopping的get请求则表示查询名为shopping索引的基本信息。发送localhost:9200/_cat/indices?v表示查询索引的索引信息 - 删除索引
发送delete请求到localhost:9200上,后面拼接所需要删除的索引的名称。比如发送localhost:9200/shopping的delete请求则删除的是名为shopping的索引 - 创建文档
发送post请求到localhost:9200上,后面拼接所需要创建的文档所在的索引,以及创建文档的表示。比如发送localhost:9200/shooping/_doc的post请求,请求体中再以json格式写入文档信息,则可以创建一个文档 - 查询文档
发送get请求到localhost:9200上,后面拼接所需要查询文档所在的索引和id。比如发送localhost:9200/shooping/_doc/1001的get请求,是查询id为1001的文档信息;发送localhost:9200/shopping/_search的get请求,是查询所有的文档信息 - 全量修改
发送put请求到localhost:9200上,后面拼接所需要修改文档所在的索引和id。比如发送localhost:9200/shooping/_doc/1001的put请求,并在请求体中传递全部的文档信息,则意味着对文档id为1001的数据进行覆盖 - 局部修改
发送post请求到localhost:9200上,后面拼接所需要修改文档所在的索引和id。比如发送localhost:9200/shooping/_update/1001的post请求,并在请求体中传递所需要修改的字段的信息,则意味对文档id为1001的数据进行局部变量的修改 - 删除文档
发送delete请求到localhost:9200上,后面拼接所需要修改文档所在的索引和id。比如发送localhost:9200/shooping/_doc/1001的delete请求,则意味对文档id为1001的数据进行删除
五、ElasticSearch查询操作
查询URL统一为localhost:9200/shopping/_doc/_search
- 条件查询:查询标题中包含魅族的所有文档
{
"query":{
"match":{
"title":"魅族"
}
}
}
- 分页查询:查询第一页,每页含有两条数据
{
"query":{
"match_all":{}
},
"from":0,
"size":2
}
- 结果筛选:只查出所有文档的title字段的信息
{
"query":{
"match_all":{}
},
"_source":["title"]
}
- 结果排序:对所有文档的数据按照price的降序进行排序
{
"query":{
"match_all":{}
},
"sort":{
"price":{
"order":"desc"
}
}
}
- 复杂查询:查询出category中包含安卓和苹果的所有数据,并对查询出的数据按照价格大于4999且小于6000进行过滤
{
"query": {
"bool": {
"should": [
{
"match": {
"category": "安卓"
}
},
{
"match": {
"category": "苹果"
}
}
],
"filter":{
"range":{
"price":{
"gt":4999,
"lt":6000
}
}
}
}
}
}
- 高亮查询:对于查询出来的所有category中包含小米的数据中的小米高亮显示
{
"query": {
"match": {
"category": "小米"
}
},
"highlight": {
"fields": {
"category": {}
}
}
}
- 聚合查询:对于查询的结果进行一系列聚合操作,包括分组,求平均值等
{
"aggs":{//聚合操作
"price_group":{//分组名称(自定义名称)
"terms":{//分组
"field":"price"//分组字段
}
}
},
"size":0
}
六、ElasticSearch映射操作
- 创建一个新的索引
发送get的localhost:9200/user请求,创建一个名为user的新索引 - 添加映射关系
发送put的localhost:9200/user/_mapping请求,请求体如下,创建映射关系
{
"properties":{
"name":{
"type":"text",//支持模糊查询
"index":true
},
"sex":{
"type":"keyword",//只支持完全匹配查询
"index":true
},
"tel":{
"type":"keyword",
"index":false//不支持索引查询
}
}
}
- 创建文档
发送localhost:9200/user/_create/1001的put请求,请求体如下,创建一个文档
{
"name":"张三",
"sex":"男性",
"tel":"15155170385"
}
- 查询文档
发送localhost:9200/user/_search的get请求,请求体如下,查询sex为男的文档
{
"query":{
"match":{
"sex":"男"
}
}
}