1、 ElasticSearch简介
1.1、什么是ElasticSearch
Elasticsearch是一个实时的分布式搜索和分析引擎
。它可以帮助你用前所未有的速度去处理大规模数据。ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
Elasticsearch和我们熟悉的solr框架相同 底层都是 luence实现,他们最大的区别是
Elasticsearch
能够简单实现分布式,solr
需要另外的插件帮助。并且Elasticsearch
支持restfulapi的访问,用起来更加方便。
1.2、ElasticSearch的特点
(1)可以作为一个大型分布式集群(数百台服务器)技术,处理PB级数据,服务大公 司;也可以运行在单机上
(2)将全文检索、数据分析以及分布式技术,合并在了一起,才形成了独一无二的ES;
(3)开箱即用的,部署简单
(4)全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的近实时处理
1.2、ElasticSearch与关系型数据库的对应关系
ElasticSearch
他包含 索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包含多个文档(documents)(行),然后每个文档包含多个字段(Fields)(列)。
ElasticSearch | Mysql |
---|---|
索引(index) | 数据库(databases) |
类型(type) | 表(table) |
文档(document) | 行(row) |
什么是ElasticSearch中的索引
它其实有两种意思
- 当它作为名词
索引
,那就是一个索引库,对应关系数据库中的一个数据库 - 当它作为动词的时候,那就把数据,把一个文档经过
索引
操作存在索引库,这么建立索引的一个过程。
2、本地安装ElasticSearch
可以到官网下载安装包 他开箱立即用,下载完成之后,解压就可以使用。解压之后,命令窗口,进入它的bin目录
,执行elasticsearch
命令
D:\afiles\elasticsearch-5.6.8\bin>elasticsearch
[2019-07-20T10:56:49,964][INFO ][o.e.n.Node ] [] initializing ...
[2019-07-20T10:56:50,164][INFO ][o.e.e.NodeEnvironment ] [FYiTvOy] using [1] data paths, mounts [
[(D:)]], net usable_space [167.3gb], net total_space [300gb], spins? [unknown], types [NTFS]
[2019-07-20T10:56:50,165][INFO ][o.e.e.NodeEnvironment ] [FYiTvOy] heap size [1.9gb], compressed
ordinary object pointers [true]
[2019-07-20T10:56:50,170][INFO ][o.e.n.Node ] node name [FYiTvOy] derived from node ID
[FYiTvOycR2GeR8IsQOaUtA]; set [node.name] to override
[2019-07-20T10:56:50,171][INFO ][o.e.n.Node ] version[5.6.8], pid[7164], build[688ecce
/2018-02-16T16:46:30.010Z], OS[Windows 7/6.1/amd64], JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit
Server VM/1.8.0_25/25.25-b02]
[2019-07-20T10:56:50,172][INFO ][o.e.n.Node ] JVM arguments [-Xms2g, -Xmx2g, -XX:+UseC
oncMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=75, -XX:+UseCMSInitiatingOccupancyOnly, -XX:+Alwa
ysPreTouch, -Xss1m, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djna.nosys=true, -Djdk.io.perm
issionsUseCanonicalPath=true, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.n
etty.recycler.maxCapacityPerThread=0, -Dlog4j.shutdownHookEnabled=false, -Dlog4j2.disable.jmx=true,
-Dlog4j.skipJansi=true, -XX:+HeapDumpOnOutOfMemoryError, -Delasticsearch, -Des.path.home=D:\afiles\e
lasticsearch-5.6.8]
[2019-07-20T10:56:52,644][INFO ][o.e.p.PluginsService ] [FYiTvOy] loaded module [aggs-matrix-sta
ts]
[2019-07-20T10:56:52,645][INFO ][o.e.p.PluginsService ] [FYiTvOy] loaded module [ingest-common]
[2019-07-20T10:56:52,652][INFO ][o.e.p.PluginsService ] [FYiTvOy] loaded module [lang-expression
]
[2019-07-20T10:56:52,656][INFO ][o.e.p.PluginsService ] [FYiTvOy] loaded module [lang-groovy]
[2019-07-20T10:56:52,657][INFO ][o.e.p.PluginsService ] [FYiTvOy] loaded module [lang-mustache]
[2019-07-20T10:56:52,657][INFO ][o.e.p.PluginsService ] [FYiTvOy] loaded module [lang-painless]
[2019-07-20T10:56:52,658][INFO ][o.e.p.PluginsService ] [FYiTvOy] loaded module [parent-join]
[2019-07-20T10:56:52,658][INFO ][o.e.p.PluginsService ] [FYiTvOy] loaded module [percolator]
[2019-07-20T10:56:52,658][INFO ][o.e.p.PluginsService ] [FYiTvOy] loaded module [reindex]
[2019-07-20T10:56:52,659][INFO ][o.e.p.PluginsService ] [FYiTvOy] loaded module [transport-netty
3]
[2019-07-20T10:56:52,659][INFO ][o.e.p.PluginsService ] [FYiTvOy] loaded module [transport-netty
4]
[2019-07-20T10:56:52,660][INFO ][o.e.p.PluginsService ] [FYiTvOy] no plugins loaded
[2019-07-20T10:56:58,481][INFO ][o.e.d.DiscoveryModule ] [FYiTvOy] using discovery type [zen]
[2019-07-20T10:56:59,662][INFO ][o.e.n.Node ] initialized
[2019-07-20T10:56:59,663][INFO ][o.e.n.Node ] [FYiTvOy] starting ...
[2019-07-20T10:57:01,572][INFO ][o.e.t.TransportService ] [FYiTvOy] publish_address {127.0.0.1:930
0}, bound_addresses {127.0.0.1:9300}, {[::1]:9300}
[2019-07-20T10:57:04,660][INFO ][o.e.c.s.ClusterService ] [FYiTvOy] new_master {FYiTvOy}{FYiTvOycR
2GeR8IsQOaUtA}{Ja-yOBMATXC9k873e8Bv4g}{127.0.0.1}{127.0.0.1:9300}, reason: zen-disco-elected-as-mast
er ([0] nodes joined)
[2019-07-20T10:57:04,740][INFO ][o.e.g.GatewayService ] [FYiTvOy] recovered [0] indices into clu
ster_state
[2019-07-20T10:57:05,626][INFO ][o.e.h.n.Netty4HttpServerTransport] [FYiTvOy] publish_address {127.0
.0.1:9200}, bound_addresses {127.0.0.1:9200}, {[::1]:9200}
[2019-07-20T10:57:05,627][INFO ][o.e.n.Node ] [FYiTvOy] started
启动过程中,出现了两个端口 一个是9200
,另外一个是9300
。
9300是java开发时候使用的端口号
9200是java以为 访问elasticseach使用的端口,比如用restful访问 用head插件等
启动成功之后,进入浏览器输入http://localhost:9200
如果看到返回了json
串,那就安装成功。
ElasticSearch的restFul api的基本使用
Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。ELasticsearch使用Javascript对象符号(JavaScript Object Notation),也就是JSON,作为文档序列化格式。
创建一个索引库(index)
发送请求http://localhost:9200/[索引库的名称]
请求方式PUT
响应的json
串代表创建成功。
创建一个文档对象
发送请求http://localhost/[索引库名称]/[对象类型]/[ID标识]
请求方式PUT
提交一个json格式的user对象
{
"username":"jack",
"age":12,
"nickname": "钢铁侠",
"sex": "男",
"interest": "我喜欢泡妞"
}
重复上面的操作,再多添加几个对象,方便之后的查询。
http://localhost:9200/myindex/user/2
{
"username":"mick",
"age":14,
"nickname": "钢铁侠",
"sex": "男",
"interest": "我喜欢飞行"
}
http://localhost:9200/myindex/user/3
{
"username":"mick",
"age":23,
"nickname": "绿巨人",
"sex": "男",
"interest": "我喜欢生气"
}
2、search搜索文档
http://localhost:9200/[索引库名称]/[类型]
提交方式 GET
3、搜索全部文档信息
http://localhost:9200/[索引库名称]/[类型]
提交方式 GET
例:查询所有user文档信息
http://localhost:9200/myindex/user/_search
{
"took": 137,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 1,
"hits": [
{
"_index": "myindex",
"_type": "user",
"_id": "2",
"_score": 1,
"_source": {
"username": "mick",
"age": 14,
"nickname": "钢铁侠",
"sex": "男",
"interest": "我喜欢飞行"
}
},
{
"_index": "myindex",
"_type": "user",
"_id": "1",
"_score": 1,
"_source": {
"username": "jack",
"age": 12,
"nickname": "钢铁侠",
"sex": "男",
"interest": "我喜欢泡妞"
}
},
{
"_index": "myindex",
"_type": "user",
"_id": "3",
"_score": 1,
"_source": {
"username": "mick",
"age": 23,
"nickname": "绿巨人",
"sex": "男",
"interest": "我喜欢生气"
}
}
]
}
}
4、按条件查找
http://localhost:9200/[索引库名称]/_search?q=[查询条件]
例如:查询nickname为緑巨人的对象
5、删除文档
http://localhost:9200/[索引库名称]/[删除文档id]
提交方式DELETE
例如删除 id为1的文档对象
修改文档
http://localhost:9200/[索引库名称]/[修改id]
··提交方式PUT
例如修改 id为2对象的信息为
{
"username": "mick2",
"age": 14,
"nickname": "钢铁侠2",
"sex": "男2",
"interest": "我喜欢飞行2"
}
显示修改成功
参考:ElasticSearch官网