ElasticSearch学习笔记Ⅱ - 基本概念与用法

一. 集群和节点

一个集群是由一个或多个节点组成的集合。下面的三个节点就组成了一个集群。每一个集群都有一个默认的名字,这里默认是elasticsearch,我之前命名的集群名字是haozz。master、slave1、slave2是自定义的节点的名字,每一个节点都是能够存储数据、参与集群索引数据以及搜索数据的独立数据。

二. ElasticSearch中的概念

  • 索引:含有相同属性的文档集合。例如可以用一个索引代表消费者的数据,另一个索引代表产品的数据。
  • 类型:一个索引中可以定义一个或多个类型,通常定义有相同字段的文档作为一个类型。
  • 文档:可以被索引的基本数据单位。比如一个港口的基本数据等,是ES里面最小的存储单位。

以上可以这样理解:索引相当于MySql里的一个DataBase,类型相当于一个Table,文档相当于一条数据

和索引相关的有两个高阶概念:

  • 分片:ES中每个索引都有多个分片,每个分片是一个Lucene索引。
  • 备份:拷贝一份分片就完成了分片的备份。

分片的好处在于,假设一个索引的数据量很大,会造成硬盘压力很大,搜索速度会出现瓶颈,就可以将索引分成多个分片,从而分摊压力,可以提高搜索和其他操作的效率。备份的好处就在于当一个分片出现问题时备份的分片可以代替工作,提高ES的可用性,备份的分片也可以执行搜索操作,分摊压力。ES默认在创建索引时会创建5个分片,1个备份,分片只能在创建时指定,后期不能修改,备份数量是可以修改的。

三. 基本用法

3.1 ES的API基本格式

ES采用RESRFul API风格,基本格式为:

http://<ip>:<port>/<索引>/<类型>/<文档id>

url中的每一个元素都是他的一些基本概念,而且都是名词。动词以常用HTTP动词决定:GET/PUT/POST/DELETE。

3.2 索引创建

可以在head插件中创建索引(非结构化):

选择索引 - 新建索引 - 输入索引名称,即可创建索引,并且可以指定分片数量和备份数量,索引的名称需要小写并且不能有下划线。创建完成后回到概览,可以看到之前创建的索引:

其中每一个方框都是ES索引的分片,粗框的是主分片,细框的是备份。按照序号分组。之所以说刚才创建的索引是非结构化的,是因为索引信息中的mappings数据是空的:

其实就可以理解为刚才创建的索引里面的数据是空的,没有任何内容。可以在符合查询中输入索引/类型/_mappings(比如:terminals/china/_mappings)格式的请求地址,然后输入json格式的请求数据,就可以在索引中创建数据,或者直接在postman中请求:

其中:

number_of_shards  索引分片数

number_of_replicas:索引备份数

而且如果请求的索引已经存在,会报错:index [terminals/lBSRLksDQk6oLPEMcLP4Qw] already exists。

3.3 数据插入

数据插入可以分为指定文档id插入和自动生成文档id插入。

指定文档id插入:postman中url:http://192.168.124.34:9200/terminals/china/1,用PUT方法,请求体为:

{
	"en_name":"pudong",
	"city":"shanghai",
	"create_date":"2019-05-15 00:00:01"
}

head中可以查询到如下数据:

自动生成id的话,postman中url:http://192.168.124.34:9200/terminals/china,用POST方法,请求体不变:

可以看到生成的id是自动生成的字符串。 

3.4 数据修改

postman中url:http://192.168.124.34:9200/terminals/china/1/_update,用POST方法,请求体为:

{
	"doc":{
		"en_name":"pudongz-zhangjiang"
	}
}

其中修改的url需要加上_update,请求体需要doc关键字,结果为:

3.5 数据删除

postman中选择DELETE请求即可。

删除索引的话也可以直接在head插件中操作。

3.6 数据查询

  • 简单查询
  • 条件查询
  • 聚合查询

3.6.1简单查询

直接使用GET请求即可。

3.6.2条件查询

postman中 url:http://192.168.124.34:9200/terminals/_search,用POST方法,查询所有请求体为:

{
	"query":{
		"match_all":{}
	},
    "from":1,
    "size":10
}

结果:

其中from和size指定起始点和查询数量,可以用来分页。

查询关键字:

{
	"query":{
		"match":{
			"city":"shanghai"
		}
	},
	"from":1,
	"size":10
}

还可以加上sort指定字段和方式用于排序。

3.6.3聚合查询

关键字aggs:

{
	"aggs":{
		"group_by_city":{
			"terms":{
				"field":"_id"
			}
		}
	}
}

好像不能使用text类型字段进行聚合。查询结果中会根据聚合信息进行汇总。也可以根据多个字段进行聚合。

3.7 高级查询

  • 子条件查询:特定字段查询所指特定值
  • 复合条件查询:以一定的逻辑组合子条件查询

子条件查询又分为:

Query Context:在查询条件中,除了判断文档是否满足查询条件外,ES还会计算一个_score来标识匹配程度,旨在判断目标文档和查询条件匹配的有多好。分为全文本查询和字段级别查询。全文本查询针对文本类型数据,字段级别查询针对结构化数据,如数字、日期等。

习语匹配关键字:"match_parase"。习语匹配就是比如我搜索的title是"ElasticSearch入门",那么匹配的结果中就会包含"ElasticSearch"和"入门"的数据。

多个字段模糊匹配关键字:"multi_match",可以传入数组作为匹配的字段。

 

Filter Context:在查询过程中,只判断该文档是否满足条件,只有yes或no。

关键字:"bool'。

 

ES中的查询太多了,还有复合查询等等。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值