使用 Maven 工程,我的 pom 文件如下所示:

    <dependencies>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.6.2</version>
</dependency>
</dependencies>

连接机器

TransportClient client = TransportClient.builder()
.build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress
.getByName("localhost"), 9300));

Index API 创建 Index 并且插入 Document

创建索引有很多种方法,这里列举常用的 2 种:

HashMap<String, Object> json = new HashMap<String, Object>();
json.put("first_name","Shuang");
json.put("last_name", "Peng");
json.put("age", 24);
json.put("about", "I love coding");
IndexResponse response = client
.prepareIndex("tseg","students","1")
.setSource(json).get(); IndexResponse response = client.prepareIndex("tseg","students","1")
.setSource(jsonBuilder()
.startObject()
.field("first_name", "Shuang")
.field("first_name", "Peng")
.field("age", 24)
.field("about", "I love coding")
.endObject())
.get();

注意:Index API 只能用于创建 index,类似于关系型数据库里面的 create table,他不能对已有的数据库进行添加。追加操作可以用后面会提到的 Update 或者 Bulk 来完成。

Get API 获取 Document

GetResponse response2 = client.prepareGet("tseg", "students", "1").get();
Map<String, Object> res = response2.getSource();
for (Map.Entry<String, Object> entry: res.entrySet()){
System.out.println(entry.getKey() + " : " + entry.getValue());
}

Delete API 删除 Index 或者 Document

// 用来删除对应的 document
DeleteResponse response3 =
client.prepareDelete("tesg","students","1").get();
// 用来删除对应的 index
DeleteIndexResponse response4 =
client.admin().indices().prepareDelete("facebook").execute().actionGet();

Update API 更新操作

更新操作也有两种方法。建议使用第一种,第二种太复杂了。。。看看就好。

第一种

client.prepareUpdate("tseg", "students", "1")
.setDoc(jsonBuilder()
.startObject().field("age", 32)
.endObject())
.get();

第二种

IndexRequest indexRequest = new IndexRequest("tseg", "students", "1")
.source(jsonBuilder()
.startObject()
.field("first_name", "Shuang")
.field("last_name", "Peng")
.field("age", 32)
.field("about", "I loving coding")
.endObject()); UpdateRequest updateRequest = new UpdateRequest("tseg","students", "1")
.doc(jsonBuilder()
.startObject().field("age", 32)
.endObject())
.upsert(indexRequest);
client.update(updateRequest).get();

不过这里提一下第二种方法,如果对应的 field 不存在的话,则更新操作自动变为插入操作,否则,就是正常的修改操作。

Multi Get API 多查找

MultiGetResponse API 可以一次返回多个要查找的值。下面介绍了两种方法,一种是返回一个 Map,我们可以按照不同的 field 取值;第二种方法是直接返回一个字符串(Json格式)。

MultiGetResponse multiGetItemResponses = client.prepareMultiGet()
.add("tseg", "students", "1", "2", "3").get(); for (MultiGetItemResponse itemResponses : multiGetItemResponses) {
GetResponse response5 = itemResponses.getResponse();
if (response5.isExists()) { // 第一种用法
Map<String, Object> fields = response5.getSource();
System.out.println(fields.get("first_name")); // 第二种用法
String json2 = response5.getSourceAsString();
System.out.println(json2);
}

Bulk API 批量操作

Bulk API允许批量提交index和delete请求, 如下:

BulkRequestBuilder bulkRequest = client.prepareBulk();
bulkRequest.add(client.prepareIndex("tseg", "students", "1")
.setSource(jsonBuilder()
.startObject()
.field("first_name", "Allen")
.field("last_name", "Peng")
.field("age", "22")
.endObject()))
.get(); bulkRequest.add(client.prepareIndex("tseg", "students", "2"))
.setSource(jsonBuilder()
.startObject()
.field("first_name", "Hou")
.field("last_name", "Xue")
.field("age", "30")
.endObject()))
.get(); HashMap<String, Object> json2 = new HashMap<String, Object>();
List<String> list = new ArrayList<String>();
list.add("music");
list.add("football");
json2.put("first_name", "Peng");
json2.put("last_name", "Peng");
json2.put("interests", list);
BulkRequestBuilder bulkRequest2 = client.prepareBulk(); // 两种执行方法,个人倾向于第一种
bulkRequest2.add(client.prepareIndex("facebook", "info",
"3").setSource(json2)).get();
// 第二种方法
bulkRequest2.add(client.prepareIndex("facebook",
"info","1").setSource(json2)).execute().actionGet();

还可以这样做:

BulkRequestBuilder bulkRequest = client.prepareBulk();
bulkRequest.add(client.prepareIndex("index1", "type1", "id1")
.setSource(source);
bulkRequest.add(client.prepareIndex("index2", "type2", "id2")
.setSource(source);
BulkResponse bulkResponse = bulkRequest.execute().actionGet();

Bulk Processor API 可在批量操作完成之前和之后进行相应的操作

BulkProcessor bulkProcessor = BulkProcessor.builder(
client,
new BulkProcessor.Listener() {
@Override
public void beforeBulk(long executionId,
BulkRequest request) { ... } @Override
public void afterBulk(long executionId,
BulkRequest request,
BulkResponse response) { ... } @Override
public void afterBulk(long executionId,
BulkRequest request,
Throwable failure) { ... }
})
.setBulkActions(10000)
.setBulkSize(new ByteSizeValue(1, ByteSizeUnit.GB))
.setFlushInterval(TimeValue.timeValueSeconds(5))
.setConcurrentRequests(1)
.build(); bulkProcessor.add(new IndexRequest("index1", "type1", "id1").source(source1));
bulkProcessor.add(new DeleteRequest("index2", "type2", "id2");
  1. beforeBulk 会在批量提交之前执行,可以从 BulkRequest 中获取请求信息request.requests() 或者请求数量 request.numberOfActions()。

  2. 第一个 afterBulk 会在批量成功后执行,可以跟 beforeBulk 配合计算批量所需时间。

  3. 第二个 afterBulk 会在批量失败后执行。

  4. 在例子中,当请求超过 10000 个(default=1000)或者总大小超过1GB(default=5MB)时,触发批量提交动作

Java操作elasticsearch的更多相关文章

  1. java操作elasticsearch实现组合桶聚合

    1.terms分组查询 //分组聚合 @Test public void test40() throws UnknownHostException{ //1.指定es集群 cluster.name 是 ...

  2. java操作elasticsearch实现query String

    1.CommonTersQuery: 指定字段进行模糊查询 //commonTermsQuery @Test public void test35() throws UnknownHostExcept ...

  3. java操作elasticsearch实现聚合查询

    1.max 最大值 //max 求最大值 @Test public void test30() throws UnknownHostException{ //1.指定es集群 cluster.name ...

  4. java操作elasticsearch实现前缀查询、wildcard、fuzzy模糊查询、ids查询

    1.前缀查询(prefix) //prefix前缀查询 @Test public void test15() throws UnknownHostException { //1.指定es集群 clus ...

  5. java操作elasticsearch实现条件查询(match、multiMatch、term、terms、reange)

    1.条件match query查询 //条件查询match query @Test public void test10() throws UnknownHostException { //1.指定e ...

  6. java操作elasticsearch实现查询删除和查询所有

    后期博客本人都只给出代码,具体的说明在代码中也有注释. 1.查询删除 //查询删除:将查询到的数据进行删除 @Test public void test8() throws UnknownHostEx ...

  7. java操作elasticsearch实现批量添加数据(bulk)

    java操作elasticsearch实现批量添加主要使用了bulk 代码如下: //bulk批量操作(批量添加) @Test public void test7() throws IOExcepti ...

  8. java操作elasticsearch实现基本的增删改查操作

    一.在进行java操作elasticsearch之前,请确认好集群的名称及对应的ES节点ip和端口 1.查看ES的集群名称 #进入elasticsearch.yml配置文件/opt/elasticse ...

  9. Java操作ElasticSearch之创建客户端连接

    Java操作ElasticSearch之创建客户端连接 3 发布时间:『 2017-09-11 17:02』  博客类别:elasticsearch  阅读(3157) Java操作ElasticSe ...

  10. 使用java操作elasticsearch(1)

    1.安装elasticsearch 这儿用的是5.6.9的版本,下载安装过程较为简单,在官网上下载好后解压到文件夹.需要注意的是在elasticsearch-5.6.9\config下的elastic ...

随机推荐

  1. ServiceBase.OnStart 方法

    msdn 解释 派生类中实现时,在由服务控制管理器 (SCM) 或在操作系统启动时 (对于自动启动的服务) 时,将启动命令发送到服务时执行. 指定当服务启动时要执行的操作. 命名空间:   Syste ...

  2. NET 文件批量下载

    HTML <a class="btn btn-warning" id="btnDownload">选中下载</a> JS /* 批量下载 ...

  3. .net core grpc consul 实现服务注册 服务发现 负载均衡(二)

    在上一篇 .net core grpc 实现通信(一) 中,我们实现的grpc通信在.net core中的可行性,但要在微服务中真正使用,还缺少 服务注册,服务发现及负载均衡等,本篇我们将在 .net ...

  4. sql 中如何查询某一列的数据在另一个表中有没有?

    假设表table1,列a,表table2,列bselect a from table1where a not in(select b from table2)

  5. OpenLayers在地图上显示统计图,饼图线状图柱状图,修复统计图跳动的问题

    环境介绍 Openlayers ol.js v5.3.0 Highcharts highcharts.js v7.0.1 jquery jquery-3.3.1.js v3.3.1 显示效果 地图放大 ...

  6. Swagger 导出API

    Swagger 导出API 这算是在博客园的第一篇博客吧,之后发的应该也会同步到博客园上. 此前的博客地址: https://blog.mytyiluo.cn Swagger简介 Swagger是一个 ...

  7. 《JavaScript高级程序设计》5.5 Function类型

    5.5 Function类型 函数实质上是对象, 每个函数都是Function类型的实例, 并且都和其他引用类型一样具有属性和方法. 因此函数名实际上也是一个指向函数对象的指针, 不会与某个函数绑定. ...

  8. C#穿透session隔离———Windows服务启动UI交互程序

    在Windows服务里面启动其他具有界面的应用程序,需要穿透session隔离,尝试了很多种方法,都可行,现在一一列举下来,并写下几个需要注意的地方. 需要注意的地方 首先要将服务的Account属性 ...

  9. jzoj5945

    這題是均分紙牌求方案數 我們可以分2種情況討論: 1.當前面部分的平均值>=現在我們要的值 那麼我們可以把所有牌都放到第i個點,現在若有k張牌,則要把k−i∗avek-i*avek−i∗ave張 ...

  10. fastadmin的页面是如何生成的?

    第一步: 访问URL http://www.fastadmin.cc/admin/mydir/test/index?addtabs=1 对应的方法是admin模块,controller文件夹下的myd ...