伊成博客
伊成博客

ElasticSearch-实战代码2

“BeanUtils.copyProperties()用法及区别”

前言

ElasticSearch提供Json格式的基于HTTP的RESTful API,可通过CURL命令直接请求,也能非常简便的在任何编程语言中使用,官方提供的常用语言客户端可在 https://www.elastic.co/guide/en/elasticsearch/client/index.html 查询下载。

接口请求

请求格式:

1
curl -X <VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'

参数 说明
VERB HTTP方法 : GET、 POST、 PUT、 HEAD 或者 DELETE
PROTOCOL http 或者 https
HOST 集群中任意节点的主机名
PORT 端口号,默认是 9200
PATH API 的终端路径
QUERY_STRING 任意可选的查询字符串参数
BODY JSON格式的请求体 (如果需要)

请求示例:

1
2
3
4
5
6
curl -X GET 'http://localhost:9200/_count?pretty' -d '
{
"query": {
"match_all": {}
}
}

接口响应
Elasticsearch接口返回一个HTTP状态码(如:200 OK)和一个JSON格式的返回值(HEAD请求除外)。上面的CURL请求将返回一个像下面一样的 JSON 体:

1
2
3
4
5
6
7
8
9
{
"count" : 0,
"_shards" : {
"total" : 0,
"successful" : 0,
"skipped" : 0,
"failed" : 0
}
}

如需显示状态码可以使用curl命令的-i参数。

ElasticSearch存储结构与概念

文档 Document

Elasticsearch是面向文档的,使用JSON作为序列化格式存储整个对象。user对象文档示例如下:

1
2
3
4
5
6
7
8
9
10
11
{
"email": "john@smith.com",
"first_name": "John",
"last_name": "Smith",
"info": {
"bio": "Eco-warrior and defender of the weak",
"age": 25,
"interests": [ "dolphins", "whales" ]
},
"join_date": "2014/05/01"
}

实际存储的文档还包含文档的元数据,元数据中的常见元素:

元素 说明
_index 文档在哪个索引存放
_type 文档对象类型
_id 文档唯一标识
_version 数据版本

注意:Type只是Index中的虚拟逻辑分组,不同的Type应该有相似的结构。6.x版只允许每个Index包含一个Type,7.x 版将会彻底移除 Type。

索引 Index

索引(Index)在ElasticSearch中是多义词:
1、类似数据库概念的存储文档集合的地方叫做索引(名词)
2、存储数据到Elasticsearch的行为也叫做索引(动词)
3、为了提升数据检索速度使用的倒排索引结构
ElasticSearch默认给索引(1)中每个文档的每个属性建立倒排索引(3)使之可以被快速检索。

节点 Node、集群 Cluster和分片 Shards

ElasticSearch是分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个实例。单个实例称为一个节点(node),一组节点构成一个集群(cluster)。分片是底层的工作单元,文档保存在分片内,分片又被分配到集群内的各个节点里,每个分片仅保存全部数据的一部分。

Elasticsearch 关键字与SQL关键字对比总结

由于Elasticsearch和MongoDB/Redis/Memcache一样,是非关系型数据库。而平常使用的MySql,Oracle,SQLServer 等为关系型数据库,二者有着本质的区别,Es查询语句使用的是DSL语言,关系式数据库使用的是T-SQL,虽然语言不同,但是有时候,一些功能还是有些相似的,为此,整理了一些ES与 关系型数据库中的功能关键字做一下对比。

SQL关键字 Elastsearch 关键字 说明
DataBase Index 数据库名称
Table type     表名称
Row Document 文档
Column Field 字段
T-SQL     Query DSL
_source 返回指定的列
SELECT * FROM table GET http://… 从……中查询
UPDATE table SET PUT http://… 从……中更新
Where Query 查询范围
ORDER BY Sort 升序ASC、倒序Desc相同
= term 判断等值,精确值查找,用它处理数字(numbers)、布尔值(Booleans)、日期(dates)以及文本(text)
In terms 限定一定范围
Not NULL exists
IS NULL missing
range 限定查询范围,可用于数值或者日期限定
> gt
< lt
>=          gte
<= lte
bool 组合过滤器
AND must 必须包含
NOT must_not 不能包含
OR should 至少有一个匹配
TOP        size 指定返回多少条,ES默认是10条,搭配From可以实现翻页效果
collapse 字段折叠
Join inner_hits 嵌套子查询

结语

现在,你已经基本了解ElasticSearch简单概念了,但请不要止步于此;
ElasticSearch有着深刻的内涵和丰富的功能等待着你去发现,
官方文档是最新最全最好的学习材料了,需要的点击
https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

参考链接 : https://www.cnblogs.com/softidea/p/6119354.html

支付宝打赏 微信打赏

如果本文对你有所帮助,请打赏 1元就足够感动我 :)