ElasticSearch Java API(二)增删改查

      现在我们来详细的阐述API的CRUD命令(Create,Retrieve,Update,Delete document)。

1. 读取文档

 GetResponse response = client.prepareGet("indexName","type","id")
                .setFields("title","_source")
                .execute()
                .actionGet();

      在准备过程中,设置了索引名称、类型名称(如果不关心类型名称,可以设置为空)和文档ID后,我们会得到一个构造器对象。该构造器对象是org.elasticsearch.action.get.GetRequestBuilder的一个实例,并可以设置如下的附加信息:

  • setField(String):这个方法指定需要返回哪些文档字段。默认情况下API只返回文档源。注意,如果不指定 _source 字段,sourceXXX()方法将不能够正常工作。
  • setIndex(String)、setType(String)、setId(String):这几个方法分别用来指定文档所在的索引名称、类型名称和文档ID。当你想要重用构造器对象或者使用prepareGet()的无参数版本时,这几个方法非常好用。
  • setRouting(String):这个方法设定了一个路由值,用来确定将由哪几个分片执行请求。
  • setParent(String):这个方法用来设定文档的父文档ID,在文档具有父子关系时使用。在这里设置了一个父文档ID相当于设置了一个指向父文档的路由。
  • setPreference(String):这个方法用来设置查询偏好,例如可能的取值有_local、_primary和其他自定义值。
  • setRefresh(Boolean):这个方法指定是否需要在执行本操作之前先执行刷新操作。默认值是false,表示ElasticSearch在执行GET操作读取文档是不执行刷新。
  • setRealtime(Boolean):这个方法指定GET操作是否实时。默认为true,意思是告诉ElasticSearch这是一个实时的GET操作。

接下来看看GET操作的响应。GetResponse对象的几个最重要的方法如下:

  • isExist():告知客户端文档是否存在。
  • getIndex():返回请求的索引名称。
  • getType():返回文档的类型名称。
  • getId():返回请求的文档ID。
  • getVersion():返回文档的版本号。
  • isSourceEmpty():告知客户端文档源是否可用或者是否不包含在当前返回的文档中。
  • getSourceXXX():这一类方法用于按特定的格式读取文档源。支持的格式有纯文本text(getSourceAsString())、key-value map(getSourceAsMap())和二进制数组bytes array(getSourceAsBytes()).
  • getField():这个方法返回表示文档字段的对象,对象中包括字段名称,字段的一个或多个取值(针对多值字段)。

2. 索引文档

      现在,我们已经学会了如何通过GET请求来读取文档。然而,如果能在索引中增加一些真实的文档以供读取可能会更棒。因此我们接着学习如何用ElasticSearch的Java API来为索引文档做准备。首先引入相应的类:

import org.elasticsearch.client.Client;
import org.elasticsearch.action.index.IndexResponse;

然后写一段代码,来向library索引的book类别中索引一个ID为2的文档:

IndexResponse response = client.prepareIndex("library","book","2")
                         .setSource("{\"title\":\"Mastering ElasticSearch\"}")
                         .execute()
                         .actionGet();

      索引请求的基本原理和之前讨论过的GET请求一样。首先创建一个精心设计的构造器对象(使用prepareIndex()调用生成一个org.elasticsearch.action.index.IndexRequestBuilder 类型的对象),然后调用这个对象来准备好索引请求和发送请求(execute()方法),并调用actionGet()来等到响应结果。唯一不便之处是需要设置包含文档结构的文档源,然而不必担心,ElasticSearch的Java API提供了一些方法来程序化的创建JSON格式的文档。需要注意的是,prepareIndex()方法还有一个不需要提供稳当的ID的版本,使用这个版本时ElasticSearch会自动生成文档ID。

      构造器对象提供了如下方法:

  • setSource():本方法用来设置文档源。ElasticSearch API定义了一些同名方法,只是参数不同,如本例中使用的是一个以文本String对象为输入的方法。当然输入参数还可以是比特数组,由字段和字段值构成的键值对或者是一个XContentBuilder类。XContentBuilder类允许我们构造任何JSON格式的文档。
  • setIndex(String)、setType(String)、setId(String):这几个方法分别用来指定文档所在的索引名称、类型名称和文档ID。当你想要重用构造器对象或者使用prepareGet()的无参数版本时,这几个方法非常好用。
  • setRouting(String):这个方法设定了一个路由值,用来确定将由哪几个分片执行请求。
  • setParent(String):这个方法用来设定文档的父文档ID,在文档具有父子关系时使用。在这里设置了一个父文档ID相当于设置了一个指向父文档的路由。

未完待续……

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值