ElasticSearch入门(五)ElasticSearch的核心概念讲解

前言

      本章对ES中的核心概念做进一步的讲解

方法

1.文档

在之前的讲解中,我们将索引理解为关系数据库的表,而文档是索引中的数据,所以我们自然的理解为关系数据库中的一条数据。

由于在ES中存在文档类型(Type)的概念,所以一个索引中所存储的文档结构上可能是不同的。

如果上面的解释你仍然不是很理解,那么简单点——索引(index)就是数据库,文档类型(Type)就是表,文档(Document)是其中的数据,这样是不是容易理解些了呢

当我们查询数据的时候,文档的结构是这个样子的:

其中,id,name,age,sex我们都了解,这个是我们自己设置的,那么其他的又是什么呢?

我们称之为元数据(Metedata):

  •  _index:代表一个document存储在哪个index中。类似的数据(document)放在同一个index,不同类型的数据放在不同的index。
  • 索引名必须是小写,不能用下划线(_)开头,不能包含逗号。
  • _type:代表document属于index下 的哪个类别(type)。一个index通常包含多个type。type名称可以大写或小写,不能用下划线(_)开头,不能包含逗号。
  • _id:代表document的唯一标识,与index和type一起确定一个唯一的document。可以手动指定,也可es自动生成。手动指定:PUT /index/type/id 自动生成: PUT /index/type/ 生成base64编码的20长度的字符串ID,分布式集群下不可能重复。
  • _score:相关度分数:匹配程度,分数越高越相关。

2.查询响应

1)pretty

我们之前创建索引也好,增加文档数据也好,使用的都是Postman或者谷歌的插件

那么我们尝试使用浏览器直接查询会怎么样呢?

浏览器下输入网址http://localhost:9200/jwang_test/user/_search,观察效果:

很显然,这实在是太难看了,这也是我们为什么用其他工具的原因。。

但是ES提供了对应的参数pretty对我们的显示结果做了美化!输入网址http://localhost:9200/jwang_test/user/_search?pretty,观察效果:

由局部的显示我们可以发现它为我们做了json的格式化操作,显得一目了然!

2)指定响应字段——?_source

有些时候我们并不需要将文档中的全部字段显示出来,那么我们应该怎么做呢?

范例:仅显示id和name

GET http://localhost:9200/jwang_test/user/1002?_source=id,name

响应结果如下:

3)只显示原始字段,不需要显示元数据信息——/_source

有些时候我们并不需要将文档中的元数据显示出来,那么我们应该怎么做呢?

GET http://localhost:9200/jwang_test/user/1002/_source

响应结果如下:

3.判断文档是否存在

有时候,我们需要判断某个文档是否存在,而不是查询它的内容!
语法:HEAD /{索引名称}/{文档类型}/{文档id}

范例:查询id为1001和1006的文档是否存在

我们首先查询一下我们jwang_test索引库中的所有文档:

查询id为1001:

http://localhost:9200/jwang_test/user/1001

响应状态码为200则代表存在:

查询id为1006结果为:

4.批量操作

1)批量查询:_mget

范例:查询id为1002和1003的文档数据

POST http://localhost:9200/jwang_test/user/_mget

{
	"ids":["1002","1003"]
}

查询结果如下所示:

2)批量添加:_bulk

语法格式:

{action:{metedata}}\n
{source body}\n
{action:{metedata}}\n
{source body}\n
......

注意:每条数据后需要加换行,最后一行也要加

范例:新增三条数据

{"create":{"_index":"jwang_test","_type":"user","_id":"1006"}}
{"id":"1006","name":"楚云飞","age":30,"sex":"男"}
{"create":{"_index":"jwang_test","_type":"user","_id":"1007"}}
{"id":"1007","name":"孙德胜","age":33,"sex":"男"}
{"create":{"_index":"jwang_test","_type":"user","_id":"1008"}}
{"id":"1008","name":"田雨","age":26,"sex":"女"}

发起请求:POST http://localhost:9200/jwang_test/user/_bulk

再次查询结果如下,可见我们批量添加成功!

2)批量删除:_bulk

{"delete":{"_index":"jwang_test","_type":"user","_id":"1006"}}
{"delete":{"_index":"jwang_test","_type":"user","_id":"1007"}}
{"delete":{"_index":"jwang_test","_type":"user","_id":"1008"}}

这样就可以将上面的数据删除,这里我就不演示了。

5.分页

在ES默认的搜索中,默认最多返回10条数据,多了不再返回。

那么这个时候就需要用到我们的分页操作了!

参数:

size:每页显示的结果数量

from:跳过多少结果数

我们先来看看我们目前索引中的所有数据:

范例:每页显示三条数据,显示第一页

发起请求:POST http://localhost:9200/jwang_test/user/_search?size=3&from=0

请求结果如下:

范例:每页显示四条数据,显示第二页

发起请求:POST http://localhost:9200/jwang_test/user/_search?size=4&from=4

请求结果如下:

6.映射

前面我们创建了索引之后,我们可以直接往里面添加索引信息。

我们知道,关系型数据库添加数据必须要定义表的字段类型,我们在ES中还并没有发现这个设定。不要着急!
如果我们没有指定字段类型的话,ES会默认给我们的字段赋上相应的类型哦!

JSON数据

ES中的数据类型

Boolean true or false

boolean

Whole number:123

long

Floating Point:123.123

double

string,valid date:"2019-10-20"

date

string

text

ES支持的基本数据类型:

字符串 : text, keyword

       text:存储数据的时候,会自动分词,并生成索引

       keyword:存储数据的时候,不会分词,而是直接整个词拿去建索引

整数 : byte, short, integer, long

浮点数 : float、double

布尔型 : boolean

日期 : date

知道了上面这些,那我们就可以创建指定数据类型结构的索引了

范例:创建指定类型结构的索引

发起请求:PUT http://localhost:9200/jwang1

{
	"settings": {
		"index": {
			"number_of_shards": 2,
			"number_of_replicas": 0
		}
	},
	"mappings": {
		"properties": {
			"name": {
				"type": "text"
			},
			"age": {
				"type": "integer"
			},
			"email": {
				"type": "keyword"
			},
			"hobby": {
				"type": "text"
			}
		}
	}
}

查询索引的映射信息:

GET http://localhost:9200/jwang1/_mapping

反馈的结果如下:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值