Elasticsearch相关文章
1. Elasticsearch搜索引擎应用实战(一)
2. Elasticsearch搜索引擎应用实战(二)(本文)
ES的安装
下面的实例都是基于ES的6.4.0版本来实现的。
1、安装Java
因为ES是Java开发的,所以要先安装Java,在6.X的版本中,ES需要的Java的最低版本为Java 8。建议您使用Oracle JDK version 1.8.0_131或者更新的版本。可以使用以下命令来检查Java的运行版本:
java -version
2、安装ES
Java安装完成之后,我们可以下载并运行ES。二进制包与所有历史版本都可以从https://www.elastic.co/downloads中获得。对于每一个版本,您可以选择zip、tar、DEB或者RPM包安装,下面我们使用zip包说明一下安装过程。
下载ES 6.4.0版本:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.0.zip
解压:
unzip elasticsearch-6.4.0.zip
安装运行:
cd elasticsearch-6.4.0./bin/elasticsearch
如果一切顺利,我们目前已经在一个集群上启动了一个名为“9cbJFwh”的节点了(在您的例子中节点名称将会不一样)。我们可以通过如下命令来查看此集群和节点的基本信息:
curl http://127.0.0.1:9200/
假如我们想覆盖集群或者节点的名称,我们可以使用如下命令启动:
./bin/elasticsearch -Ecluster.name=my_cluster_name-Enode.name=my_node_name
注:
1)由于ES可以接收用户输入的脚本并且执行,为了系统安全考虑,ES不能使用root账户启动,建议创建一个单独的用户来运行ES。
2)./bin/elasticsearch为在前台启动ES,还可以在后台启动:
./bin/elasticsearch -d
3)关闭ES
A、ctrl+c
对于在前台启动的方式来说,直接ctrl+c是简单的关闭单个节点的方法
B、杀掉服务器进程也可以
Linux上使用kill命令,Windows上使用任务管理器
C、用命令来关闭整个集群/单个节点
由于ES常用在集群中,集群停止相对有些复杂,我们会在下个chat中详细说明。
ES的REST API
1、集群管理
1)检查集群健康状况
curl -XGET http://127.0.0.1:9200/_cat/health?v
2)获取集群的节点列表
curl -XGET http://127.0.0.1:9200/_cat/nodes?v
3)查看节点的基本信息
curl -XGET http://127.0.0.1:9200/_cluster/state/nodes?pretty
4)查看分片情况
curl -XGET http://127.0.0.1:9200/_cat/shards?pretty
2、索引管理
1)查看所有的索引
curl -XGET http://127.0.0.1:9200/_cat/indices?v
如果此命令出现如下响应,那说明我们的集群中还没有索引:
health status index uuid pri rep docs.count docs.deletedstore.size pri.store.size
2)创建索引
curl -XPUT http://127.0.0.1:9200/blog?pretty
此时再执行上面查看所有的索引命令,即可查看到刚刚创建的索引。
3)删除索引
curl -XDELETE http://127.0.0.1:9200/blog?pretty
4)创建索引,同时导入索引mappings
curl -H'Content-Type:application/json' -XPUT -d@mappings.jsonhttp://127.0.0.1:9200/blog?pretty
mappings.json参考:
{ "mappings": { "content": { "properties":{ "name":{ "type":"keyword" }, "age":{ "type":"keyword" } } } }}
5)获取索引基本信息
curl -XGET http://127.0.0.1:9200/blog?pretty
6)获取索引的mappings信息
curl -XGET http://127.0.0.1:9200/blog/_mappings?pretty
7)获取索引的settings信息
curl -XGET http://127.0.0.1:9200/blog/_settings?pretty
3、文档管理
我们用创建索引命令创建一个blog索引,然后开始如下操作。
1)新增文档
curl -H'Content-Type:application/json' -XPUThttp://127.0.0.1:9200/blog/user/1/?pretty-d'{"name":"tunan", "age":30}'
此命令为在blog索引user类型中插入一条id为1、name为tunan、age为30的数据。
2)查看文档
curl -XGET http://127.0.0.1:9200/blog/user/1?pretty
3)查看文档,不指定ID
curl -XGET http://127.0.0.1:9200/blog/user/_search?pretty
4)替换文档
curl -H'Content-Type:application/json' -XPUThttp://127.0.0.1:9200/blog/user/1?pretty-d'{"name":"tunan","age":"32"}'
5)没有明确ID时,新增文档
curl -H'Content-Type:application/json' -XPOSThttp://127.0.0.1:9200/blog/user?pretty -d'{"name":"meigui","age":"20"}'
如果不指定ID,ES将会生成一个随机ID。因为我们没有指定ID,所以此处使用了POST动作,而不是PUT。
6)更新文档
curl -H'Content-Type:application/json' -XPOSThttp://127.0.0.1:9200/blog/user/1/_update?pretty-d'{"doc":{"name":"tunan2018"}}'
7)更新文档,同时新增字段
curl -H'Content-Type:application/json' -XPOSThttp://127.0.0.1:9200/blog/user/1/_update?pretty-d'{"doc":{"name":"tunan2008","sex":1}}'
8)更新文档,用简本来执行
curl -H'Content-Type:application/json' -XPOSThttp://127.0.0.1:9200/blog/user/1/_update?pretty-d'{"script":"ctx._source.age+=1”}'
ctx._source 代表当前将被更新的源文档
9)删除文档
curl -XDELETE http://127.0.0.1:9200/blog/user/1?pretty
10)搜索文档
curl -H'Content-Type:application/json' -XGEThttp://127.0.0.1:9200/blog/user/_search?pretty-d'{"query":{"term":{"name":{"value":"meigui"}}}}'
注:
1、由以上的实例,我们可以看到访问ES中数据的模式(pattern)为:
///
2、在url后面增加pretty,可以使返回数据格式化输出
3、通常情况下,REST API接口使用9200访问,JavaAPI使用9300访问
ES在 Spring Boot 中的应用实例:TransportClient
ES本身是Java开发的,天生对Java的支持能力是最好的,下面我们看一下如何使用TransportClient来操作ES数据。
1、mvn仓库配置
在mvn项目中可以在pom.xml增加mvn仓库,如下:
org.elasticsearch.client transport ${elasticsearch.version}
2、连接ES集群
客户端通过TransportClient对象可以使用远程连接的方式连接ES集群。例如:
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY);client.addTransportAddress(newTransportAddress(InetAddress.getByName(host1), 9300)).addTransportAddress(newTransportAddress(InetAddress.getByName(host2), 9300));
3、新增文档
HashMap data = new HashMap<>();data.put("name", "tunan");data.put("age", 30);BulkRequestBuilderbulkRequestBuilder = client.prepareBulk();IndexRequestBuilderindexRequestBuilder = client.prepareIndex("blog", "user", u.getCid());indexRequestBuilder.setSource(data);bulkRequestBuilder.add(indexRequestBuilder);bulkRequestBuilder.execute();
4、修改文档
HashMap data =newHashMap<>();data.put("name","tunan66666");data.put("age", 28);UpdateRequestBuilder updateRequestBuilder =client.prepareUpdate("blog","user", id);updateRequestBuilder.setDoc(data);updateRequestBuilder.execute().actionGet();
5、查询文档
GetResponseresponse = client.prepareGet(“blog”, “user”, id).get();Stringsource = response.getSource().toString();longversion = response.getVersion();StringindexName = response.getIndex();Stringtype = response.getType();Stringid = response.getId();
6、删除文档
BulkRequestBuilderbuilder = client.prepareBulk();for (Integer id : idList) { builder.add(client.prepareDelete("blog", "user", id).request());}builder.get();