Elasticsearch提供两个内置的client给JAVA API进行数据交互使用:node
本篇利用 Transport client 方式进行数据交互,端口为9300(9200端口是基于RESTful方式的)。 使用elasticsearch提供的Java API,利用Client对象对elasticsearch执行操做 ,全部操做在本质上是彻底异步的。数据库
Eclipse建立Maven Project,并在pom.xml中引入ES的maven包:json
2.建立 Transport client 连接到集群数组
Setting对象用来告诉Transport Client要连接到哪一个集群和节点,cluster.name是集群名称,node.name是节点名称,这两个属性值必须与%ES_HOME%/config下elasticsearch.yml文件设置一致。 若是链接到一个 Elasticsearch 集群,构建器能够接受多个地址。(在本例中只有一个 localhost 节点。)dom
Transport Client 有一个集群嗅探功能,当client.transport.sniff设置为ture时容许它动态地添加新的主机和删除旧的。经过调用addTransportAddress构建, 链接到node节点的node list中, 。在这以后,客户机将调用内部集群状态API在这些节点发现可用的数据节点上。客户端将被替换的内部节点列表中与数据节点。这个列表默认每5秒刷新。注意,IP地址为node节点在elasticsearch的发布地址配置。异步
其余设置:elasticsearch
client.transport.ignore_cluster_name:
当设置为true时,忽略集群名称验证
。maven
client.transport.ping_timeout
: 超时,默认为5s.性能
client.transport.nodes_sampler_interval
:多长时间链接node list,默认5s.ui
3.索引的CRUD操做
要求JSON格式的文档,方式多样,推荐使用ES内置的 XContentFactory.jsonBuilder() 方法生成。
添加索引的代码:
索引名称(vinux)和类别(employee)是必须的,ID(1)若是不指定则会默认生成一个哈希值的ID。
IndexResponse对象返回数据:
① getIndex():索引名称。
② getType():类别名称。
③ getId():生成的文档ID。
④ getVersion():版本号,若是是第一次建立文档则返回1。
⑤ isCreated():若是为true则新建,false为update。
也可使用UUID.randomUUID()来生成一个ID:
经过GetResponse.getSourceAsString()方法返回一个JSON数据:
代码
①第一种方式:经过建立UpdateRequest对象,而后将其发送到客户端进行修改。
结果:
②第二种方式:利用prepareUpdate()方法。
注意:红框中的setDoc()方法,而不是setSource()方法。还有一个方式是利用setScript()方法生成文档。
在UpdateRequest对象中使用script方法:
③第三种方式:使用upsert()方法,若是索引存在就修改,没有就add。
结果:
而后返回SearchHit数组:
结果也是返回SearchHit数组 :
要注意的第一个有趣的 API 用法是 QueryBuilders.matchQuery("name", Lilei);。这是您设置对 name 字段的查询的地方。另外要注意的是 QueryBuilders.andQuery("age", "100"),它是将查询的 name 和 age 部分合并到 AND 查询中的一种方法。 andQuery ()方法现已被fuzzyQuery()替代。
结果:
search请求只是返回一个单一的结果页面,而scroll能够用来检索大量的结果,就像数据库中的游标cursor。 好比你一次请求的数据会很大,可使用scroll这样的流式接口,scroll会把你的所须要的结果标记起来,同时还会对数据进行排序,可是这样会影响性能。
经过getCount()方法返回总数。
OK ,以上就是ES关于JAVA API 的相关操做。
esdemo下载:http://pan.baidu.com/s/1cqRwF8。