每天进步一点点---------ElasticSearch

ElasticSearch

学习一个组件必须先来一个官网:https://www.elastic.co/cn/elasticsearch/
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。
和solr相比的选择优势:
(1)搜索之外还带有分析
(2)ElasticSearch暴露更多的指标
(3)ElasticSearch适合实时搜索

简单安装

学之前先安装起来,咋简单咋来。
(1)从官网下载ElasticSearch
在这里插入图片描述
(2)在Liunx创建ElasticSearch用户

groupadd elasticSearch
useradd elasticSearch -g elasticSearch
passwd elasticSearch

(3)修改用户可以打开的文件数目
vim elasticsearch.yml
在这里插入图片描述
(4)上传下载的软件包,解压后,修改elasticsearch.yml
vim elasticsearch.yml
在这里插入图片描述
(5)修改ElasticSearch解压目录为ElasticSearch用户
chown -R elasticSearch:elasticSearch *
创建一个elasticSearch启动脚本,或者切换到ElasticSearch用户启动elasticSearch

#!/bin/bash
su - elasticSearch <<EOF
	cd /opt/elasticSearch/elasticsearch-7.13.2/bin/
	./elasticsearch
	exit;
EOF

(6)启动后查看启动结果
Linux后台:
在这里插入图片描述
WEB页面:
在这里插入图片描述

基本应用

使用之前先介绍一下ES的数据结构,在这里感谢尚硅谷,让我又可以白嫖一次。
在这里插入图片描述
注:Type在ElasticSearch 6.X中已经弱化,一个index仅一个Type,ElasticSearch 7.X直接去掉了Type字段,

ElasticSearch类似于数据库,基本的基本就是增删改查了。
索引操作:

(1)创建索引
PUT **http://192.168.1.8:9200/**book
加粗部分是ElasticSearch的连接地址,book是需要增加的索引,方法为put方法,具有幂等性,已经增加过再次增加会报错。
(2)查找索引
GET **http://192.168.1.8:9200/**book
加粗部分是ElasticSearch的连接地址,book是需要增加的索引,方法为get方法
(3)查找所有索引
GET http://192.168.1.8:9200/_cat/indices?v
加粗部分是ElasticSearch的连接地址,book是需要增加的索引,方法为get方法
(4)删除索引
DELETE **http://192.168.1.8:9200/**book
加粗部分是ElasticSearch的连接地址,book是需要增加的索引,方法为delete方法,重复删除会报错

文档操作 数据操作

(1)增加数据
_doc(_create)代表创建数据,当数据已存在时,删除现有数据,然后增加数据
POST http://192.168.1.8:9200//book/_doc

post请求体:
{
	"name":"zhangfei"
}
返回:
{
    "_index": "book",
    "_type": "_doc",
    "_id": "XEI4NHoBKz5PQ0LDpmsn",     //唯一性标识,同样的请求多次发出时,id会变
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 0,
    "_primary_term": 2
}

指定id增加,其实应该叫指定id修改,可以使用PUT也可以使用POST
POST/PUT http://192.168.1.8:9200//book/_doc/2
其中2是指定的id

post请求体:
{
	"name":"zhangfei"
}
返回:
{
    "_index": "book",
    "_type": "_doc",
    "_id": "2", 			//唯一性标识,同样的请求多次发出时,id不会变
    "_version": 6,
    "result": "updated",	//这里看着是更新,其实还是删除后再创建,比如改变请求体,增加age的话,是不会起作用的
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 8,
    "_primary_term": 2
}

(2)查询数据

指定id查询
GET http://192.168.1.8:9200//book/_doc/2
其中2是指定的id,如果id不存在时,会报found:false

{
    "_index": "book",
    "_type": "_doc",
    "_id": "2",
    "_version": 6,
    "_seq_no": 8,
    "_primary_term": 2,
    "found": true,
    "_source": {
        "name": "zhangfei"
    }
}

查询全部
GET http://192.168.1.8:9200//book/_search

{
    "took": 2,			//耗费的时间
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 4,			//命中的结果,命中4个
            "relation": "eq"
        },
        "max_score": 1,
        "hits": [
            {
                "_index": "book",
                "_type": "_doc",
                "_id": "XEI4NHoBKz5PQ0LDpmsn",
                "_score": 1,
                "_source": {
                    "name": "zhangfei"
                }
            },
            {
                "_index": "book",
                "_type": "_doc",
                "_id": "XUI9NHoBKz5PQ0LDwWsG",
                "_score": 1,
                "_source": {
                    "name": "zhangfei"
                }
            },
            {
                "_index": "book",
                "_type": "_doc",
                "_id": "XkI9NHoBKz5PQ0LDx2tB",
                "_score": 1,
                "_source": {
                    "name": "zhangfei"
                }
            },
            {
                "_index": "book",
                "_type": "_doc",
                "_id": "2",
                "_score": 1,
                "_source": {
                    "name": "zhangfei"
                }
            }
        ]
    }
}

(3)修改数据

完全修改在前面已经讲过,部分修改使用update,此时仅能使用POST
POST http://192.168.1.8:9200//book/_update/2
其中2是指定的id,如果id不存在时,会报found:false

post请求体:
{
	"doc":{					// update时,必须加上doc
			"name":"zhangfei",
			"age":"18"
	}
}
返回:
{
    "_index": "book",
    "_type": "_doc",
    "_id": "2",
    "_version": 7,
    "result": "updated",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 9,
    "_primary_term": 2
}

(4)删除数据
指定id删除
DELETE http://192.168.1.8:9200//book/_doc/2
其中2是指定的id,如果id不存在时,会报result:not found

回显:
{
    "_index": "book",
    "_type": "_doc",
    "_id": "XEI4NHoBKz5PQ0LDpmsn",
    "_version": 2,
    "result": "deleted",		//删除
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 10,
    "_primary_term": 2
}

复杂查询

(1)条件查询
POST http://192.168.1.8:9200//book/_search

post请求体:
{
	"query":{
		"match":{
			"age":"18"
		}
	}
}
返回:
{
    "took": 3,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 1,
            "relation": "eq"
        },
        "max_score": 0.2876821,
        "hits": [
            {
                "_index": "book",
                "_type": "_doc",
                "_id": "2",
                "_score": 0.2876821,
                "_source": {
                    "name": "zhangfei",
                    "age": "18"
                }
            }
        ]
    }
}

(2)全量分页查询
POST http://192.168.1.8:9200//book/_search

post请求体:
{
	"query":{
		"match_all":{
			
		}
	},
	"from":0,      //0页,从0开始
	"size":2       // 每页两个
}
返回:
{
    "took": 116,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 3,
            "relation": "eq"
        },
        "max_score": 1,
        "hits": [
            {
                "_index": "book",
                "_type": "_doc",
                "_id": "2",
                "_score": 1,
                "_source": {
                    "name": "zhangfei",
                    "age": "18"
                }
            },
            {
                "_index": "book",
                "_type": "_doc",
                "_id": "XUI9NHoBKz5PQ0LDwWsG",
                "_score": 1,
                "_source": {
                    "name": "zhangfei"
                }
            }
        ]
    }
}

(3)全量过滤查询 显示指定字段和排序
POST http://192.168.1.8:9200//book/_search

post请求体:
{
	"query":{
		"match_all":{
			
		}
	},
	"_source":["age"],       //仅显示age字段
	"sort":{
		"age":{
			"order":"desc"     // 按照age排序,此例中有的没有age,因此会报错
		}
	}
}
返回:
{
    "took": 116,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 3,
            "relation": "eq"
        },
        "max_score": 1,
        "hits": [
            {
                "_index": "book",
                "_type": "_doc",
                "_id": "2",
                "_score": 1,
                "_source": {
                    "name": "zhangfei",
                    "age": "18"
                }
            },
            {
                "_index": "book",
                "_type": "_doc",
                "_id": "XUI9NHoBKz5PQ0LDwWsG",
                "_score": 1,
                "_source": {
                    "name": "zhangfei"
                }
            }
        ]
    }
}

(4)多条件查询
POST http://192.168.1.8:9200//book/_search

多条件与的关系
{
	"query":{
		"bool":{
			"must":[
				{
					"match":{ "name":"zhangfei"}
				},
				{
					"match":{"age":18}
				}
				]
		}
	}
}
多条件或的关系
{
	"query":{
		"bool":{
			"should":[
				{
					"match":{ "name":"zhangfei"}
				},
				{
					"match":{"age":18}
				}
				]
		}
	}
}
范围查询
{
	"query":{
		"bool":{
			"must":[
				{
					"match":{ "name":"zhangfei"}
				},
				{
					"match":{"age":18}
				}
				],
				"filter":{
					"range":{
						"age":{
							"gt":10      //查询age大于10
						}
					}
				}
		}
	}
}

(5)全词匹配 完全匹配
POST http://192.168.1.8:9200//book/_search

{
	"query":{
		"match":{
			"name":"小华"      // 会拆分成小 和  华,把两个都匹配的检索出来,英文是按照空格拆分的
		}
	}
}
完全匹配
{
	"query":{
		"match_phrase":{
			"name":"小米"   只能匹配小米
		}
	}
}

(6)聚合查询 统计查询
POST http://192.168.1.8:9200//book/_search
可以用来分组和求平均值等
(7)映射关系
先创建索引,使用上面已经学过的创建索引
设置索引的数据结构:
POST http://192.168.1.8:9200/user/_mapping

请求体
{
	"properties":{
		"name":{
			"type":"text",     //name字段为全词匹配,即小米即匹配小也匹配米
			"index":true       //name字段允许被索引
		},
		"sex":{
			"type":"keyword",    // sex字段为完全匹配,即小米仅匹配小米
			"index":true
		},
		"tel":{
			"type":"keyword",
			"index":false
		}
	}
}

查询索引的数据结构:
GET http://192.168.1.8:9200/user/_mapping

{
    "user": {
        "mappings": {
            "properties": {
                "name": {
                    "type": "text"
                },
                "sex": {
                    "type": "keyword"
                },
                "tel": {
                    "type": "keyword",
                    "index": false
                }
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值