本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2024-11(1)

Elasticsearch基本操作

发布于2021-05-29 23:33     阅读(717)     评论(0)     点赞(7)     收藏(3)


环境准备

修改主机名

[root@localhost ~]# hostnamectl set-hostname vbcHost01
查看三个主机名:静态、瞬态和灵活主机名
[root@localhost ~]# hostnamectl --pretty
[root@localhost ~]# hostnamectl --static
[root@localhost ~]# hostnamectl --transient

主机名和IP映射

[root@localhost ~]# vi /etc/hosts

yum安装jdk

执行命令yum -y list java*查看可安装java版本
执行命令yum install -y java-11-openjdk-devel.i686
查看已安装: /usr/lib/jvm/

Linux创建用户

 adduser elasticsearch
 passwd elasticsearch
 chown -R elasticsearch elasticsearch-7.13.0
 su elasticsearch

下载安装elasticsearch

https://www.elastic.co/cn/downloads/past-releases#elasticsearch

启动ES

  • root用户修改elasticsearch-7.13.0/config/elasticsearch.yml文件,
    添加
    bootstrap.system_call_filter: false
    bootstrap.memory_lock: true
    network.bind_host: 0.0.0.0
    network.host: 172.176.21.223
    discovery.seed_hosts: vbcHost01
    cluster.initial_master_nodes: vbcHost01
    注意空格

  • root用户设置系统资源
    vi /etc/security/limits.conf
    添加
    elasticsearch soft nproc 65535
    elasticsearch soft nofile 65536
    elasticsearch hard nofile 65536
    elasticsearch soft memlock unlimited
    elasticsearch hard memlock unlimited

  • root用户设置虚拟内存
    vi /etc/sysctl.conf
    添加
    vm.max_map_count=262144
    然后执行: sysctl -p

  • elasticsearch用户进入elasticsearch-7.13.0/bin ,执行elasticsearch脚本
    9300 端口为 Elasticsearch 集群间组件的通信端口
    9200 端口为浏览器访问的 http协议 RESTful 端口

基本操作

ES和MySQL定义上的一些区别

ESMySQL
Index
Types
Documents

Elasticsearch 6.X 中,一个 index 下已经只能包含一个
type,Elasticsearch 7.X 中, Type 的概念已经被删除。

索引

索引,类似于数据库中的 database

场景协议URL
创建索引PUThttp://172.176.21.220:9200/shopping
查看所有索引GEThttp://172.176.21.220:9200/_cat/indices?v
查看单个索引GEThttp://172.176.21.220:9200/shopping
删除索引DELETEhttp://172.176.21.220:9200/shopping
  • shopping 为索引名
  • PUT协议有幂等校验,POST没有幂等校验
创建索引
  • 创建索引等同于创建索引数据库
创建索引~~Response
{
 "acknowledged"【响应结果】: true, # true 操作成功
 "shards_acknowledged"【分片结果】: true, # 分片操作成功
 "index"【索引名称】: "shopping"
}
查看全部索引
_cat表示查看;indices表示索引。v表示详细展示。三者表示查看当前 ES服务器中的所有索引详细信息

查看全部索引~~Response
在这里插入图片描述

查看单个索引
  • URL和创建索引一样,区别在于请求方法。查看单个索引用GET协议

查看单个索引 ~~ Response
在这里插入图片描述

删除索引
  • URL和创建索引一样,区别在于请求方法。删除索引用DELETE协议
    删除索引 ~~ Response
    {
    “acknowledged”【响应结果】: true, # true 操作成功
    }

文档

文档可以类比为关系型数据库中的表数据,添加的数据格式为 JSON 格式。

场景协议URL
添加文档POSThttp://172.176.21.220:9200/shopping/_doc
添加指定Id的文档POSThttp://172.176.21.220:9200/shopping/_doc/20210527
查看某个文档GEThttp://172.176.21.220:9200/shopping/_doc/20210527
查看所有文档GEThttp://172.176.21.220:9200/shopping/_search
全局修改某个文档PUThttp://172.176.21.220:9200/shopping/_doc/20210527
局部修改某个文档POSThttp://172.176.21.220:9200/shopping/_update/20210527
删除某个文档DELETEhttp://172.176.21.220:9200/shopping/_doc/20210527
条件删除文档POSThttp://172.176.21.223:9200/shopping/_delete_by_query
索引中添加文档
  • _doc表示在索引中添加文档,可以用_create代替
  • ES服务器会随机生成一个唯一性Id
  • _doc/xxxxx添加指定Id为XXXXX的文档

Response 在这里插入图片描述

查看文档
  • _search 查看指定索引下的所有文档,_doc/xxxx查看指定索引指定Id文档

Response
在这里插入图片描述

更新文档
  • 指定索引指定Id的整个文档修改,使用PUT协议; _doc
全局更新文档,同新增文档请求体
{
 "title":"小米手机",
 "category":"小米",
 "images":"http://www.gulixueyuan.com/xm.jpg",
 "price":7999.00
}
  • 指定索引指定Id的文档局部修改,使用POST协议; _update
局部修改文档
{ 
 "doc": {
 "title":"小米PLUS"
 } 
}
删除文档
  • _delete协议删除索引中的文档
条件删除文档
  • POST协议,_delete_by_query
{
 	"query":{
 		"match":{
 			"price":4000.00
 		}
	 }
 }

Response
在这里插入图片描述

映射

  • 索引库(index)中的映射,类似于数据库(database)中的表结构(table)
  • 创建数据库表需要设置字段名称,类型,长度,约束等;
  • 索引库也一样,需要知道这个类型下有哪些字段,每个字段有哪些约束信息,这就叫做映射(mapping)
场景协议URL
创建映射POSThttp://172.176.21.223:9200/shopping/_mapping
查看映射GEThttp://172.176.21.223:9200/shopping/_mapping
索引映射关联PUThttp://172.176.21.223:9200/student
创建映射
  • _mapping
  • PUT
{
 "properties": {
	 "name":{
		"type": "text",
		"index": true
	 },
	 "sex":{
		"type": "text",
		"index": false
	 },
	 "age":{
		"type": "long",
		"index": false
	 }
 }
}
查看映射
  • GET
索引映射关联
  • PUT
  • 即创建索引时,连映射一起创建了
{
 "settings": {},
 "mappings": {
	 "properties": {
		"name":{
		 "type": "text",
		 "index": true
		},
		"sex":{
		 "type": "text",
		 "index": false
		},
		"age":{
		 "type": "long",
		 "index": false
		}
	 }
 }
}

高级查询

查询所有
{
	 "query": {
		"match_all": {} #查询所有
	 } 
 }
匹配查询
查询条件进行分词,然后进行查询,多个词条之间是 or 的关系
{
	 "query": {
	 	"match":{
	 		"category": "小米"
	 	}
	 } 
 }
字段匹配查询

在多个字段中查询

{
	 "query": {
	 	"multi_match":{
	 		"query": "小米",
	 		"fields":["title","category"]
	 	}
	 } 
 }
关键字精确查询
  • 精确的关键词匹配查询,不对查询条件进行分词
 {
 	"query": {
		 "term": {
			"price": {
				 "value": 4999
			}
		 }
	} 
 }
多关键字精确查询
  • terms 查询和 term 查询一样,但它允许指定多值进行匹配。
  • 如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件,类似于 mysql 的 IN语句
{
 "query": {
	"terms": {
		"title": ["小米手机","华为手机"]
	}
 } 
}


所属网站分类: 技术文章 > 博客

作者:举起你的手来

链接:http://www.javaheidong.com/blog/article/207894/1851d2bf43991426fbf1/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

7 0
收藏该文
已收藏

评论内容:(最多支持255个字符)