介绍
The Elastic Stack, 包括 Elasticsearch、Kibana、Beats 和 Logstash(也称为 ELK Stack)。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。Elaticsearch,简称为ES, ES是一个开源的高扩展的分布式全文搜索引擎,是整个Elastic Stack技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。
目前市面上流行的搜索引擎软件,主流的就两款:Elasticsearch和Solr,这两款都是基于Lucene搭建的,可以独立部署启动的搜索引擎服务软件。由于内核相同,所以两者除了服务器安装、部署、管理、集群以外,对于数据的操作 修改、添加、保存、查询等等都十分类似。
Http基本操作
1.索引
创建索引——对比关系型数据库,创建索引就等同于创建数据库
向 ES 服务器发 PUT 请求 http://127.0.0.1:9200/shopping,自动创建shopping索引
查看所有索引——向 ES 服务器发 GET 请求 http://127.0.0.1:9200/_cat/indices?v
查看单个索引——向 ES 服务器发 GET 请求 http://127.0.0.1:9200/shopping
删除索引——向 ES 服务器发 DELETE 请求 http://127.0.0.1:9200/shopping
2.文档
创建文档——索引已经创建好了,接下来我们来创建文档,并添加数据。这里的文档可以类比为关系型数
据库中的表数据,添加的数据格式为 JSON 格式向 ES 服务器发 POST 请求 http://127.0.0.1:9200/shopping/_doc,并在请求体中放入如下json字符
1
2
3
4
5
6{
"title":"小米手机",
"category":"小米",
"images":"http://www.gulixueyuan.com/xm.jpg",
"price":3999.00
}上面的数据创建后,由于没有指定数据唯一性标识(ID ),默认情况下 ES 服务器会随机生成一个 。
如果想要自定义唯一性标识,需要在创建时指定http://127.0.0.1:9200/shopping/_doc/1001查看文档——向 ES 服务器发 GET 请求 http://127.0.0.1:9200/shopping/_doc/1001
修改文档——和新增文档一样,输入相同的URL 地址请求,如果请求体变化,会将原有的数据内容覆盖
修改字段——修改数据时,也可以只修改某一给条数据的局部信息
向 ES 服务器发 POST 请求 http://127.0.0.1:9200/shopping/_update/1001,请求体如下:
1
2
3
4
5{
"doc":{
"price":3000.00
}
}根据唯一性标识,查询文档数据,文档数据已经更新
删除文档——删除一个文档不会立即从磁盘上移除,它只是被标记成已删除(逻辑删除)。向 ES 服务器发 DELETE 请求 http://127.0.0.1:9200/shopping/_doc/1001
条件删除文档——一般删除数据都是根据文档的唯一性标识进行删除,实际操作时,也可以根据条件对多条数据进行删除
向ES 服务器发 POST 请求 http://127.0.0.1:9200/shopping/_delete_by_query,json请求体如下:
1
2
3
4
5
6
7{
"query":{
"match":{
"price":3999.00
}
}
}
3.映射
有了索引库,等于有了数据库中的database。接下来就需要建索引库( 中的映射了,类似于数据库中的表结构 。创建数据库表需要设置字段名称,类型,长度,约束等;索引库也一样,需要知道这个类型下有哪些字段,每个字段有哪些约束信息,这就叫做映射。
创建映射——向 ES 服务器发 PUT 请求 http://127.0.0.1:9200/student/_mapping,请求体内容为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17{
"properties": {
"name": {
"type": "text",
"index": true
},
"sex": {
"type" :"text",
"index": false
},
"age": {
"type":"1ong",
"index": false
}
}
}映射数据说明:
字段名:任意填写,下面指定许多属性,例如: title 、 subtitle 、 images 、 price
type :类型 Elasticsearch 中支持的数据类型非常丰富,说几个关键的:
text:可分词
keyword:不可分词,数据会作为完整字段进行匹配
Date :日期类型
Array :数组类型
index :是否索引,默认为 true ,也就是说你不进行任何配置,所有字段都会被索引。
true:字段会被索引,则可以用来进行搜索
false:字段不会被索引,不能用来搜索
查看映射——向 ES 服务器发 GET 请求 http://127.0.0.1:9200/student/_mapping
JavaAPI
1.索引
连接客户端
1 | //连接es服务器 |
创建索引
1 | CreateIndexRequest request = new CreateIndexRequest("user"); |
查询索引
1 | GetIndexRequest request = new GetIndexRequest("user"); |
删除索引
1 | // 删除索引 请求对象 |
2.文档
新增文档
1 | IndexRequest request = new IndexRequest(); |
修改文档
1 | UpdateRequest request = new UpdateRequest(); |
查询文档
1 | GetRequest requset = new GetRequest(); |
删除文档
1 | DeleteRequest request = new DeleteRequest().index("user").id("1"); |
批量操作
1 | 创建批量新增请求对象 |
3.高级查询
3.1查询全部数据
1 | SearchRequest request = new SearchRequest(); |
3.2条件查询
1 | SearchRequest request = new SearchRequest(); |
3.3分页查询
1 | SearchRequest request = new SearchRequest(); |
3.4查询排序
1 | SearchRequest request = new SearchRequest(); |
3.5过滤字段
1 | SearchRequest request = new SearchRequest(); |
3.6组合查询
1 | SearchRequest request = new SearchRequest(); |
3.7范围查询
1 | SearchRequest request = new SearchRequest(); |
3.8模糊查询
1 | SearchRequest request = new SearchRequest(); |
3.9高亮查询
1 | SearchRequest request = new SearchRequest(); |
3.10聚合查询
1 | SearchRequest request = new SearchRequest(); |
3.11分组查询
1 | SearchRequest request = new SearchRequest(); |
结语
这里只是总结了ElasticSearch的http操作和JavaAPI的使用,算是入门了。个人建议JavaAPI过一遍有个印象就行,用到直接百度搜。
进阶版的集群和优化现在打算不搞,以后碰到了再学吧😂我现在菜的很,专挑最拉的学一点。