环境:使用RestHighLevelClient进行bulk操作
代码如下:
/**
* es 批量存数据的方法
* 1.创建es clent
* 2.创建bulk请求体
* 3.向bulk请求体中添加多个数据
* 4.发起rest请求
* 5.关闭client
* @throws IOException
*/
public void bulk2() throws IOException {
int a = 1;
//创建连接
RestHighLevelClient restClient = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost",9200,"http")
)
);
BulkRequest request = new BulkRequest();
// source中可以存入Map(String,Object)
request.add(new IndexRequest("index_text","doc","1")
.source(XContentType.JSON,"name","amy","age",10))
.add(new IndexRequest("index_text","doc","2")
.source(XContentType.JSON,"name","bob","age",11));
restClient.bulk(request);
restClient.close();
}
代码中传入source()中的参数还可以为一下形式
// 通过Map(String,Object) 构建source中的参数
BulkRequest request2 = new BulkRequest();
Map<String,Object> jsonMap = new HashMap<>();
jsonMap.put("name","小明");
jsonMap.put("age",11);
request2.add(new IndexRequest("index_text","doc","1")
.source(jsonMap));
restClient.bulk(request2);
// 通过XContentBuilder 构建source中的参数
XContentBuilder builder = new XContentFactory().jsonBuilder();
builder.startObject();
{
builder.field("name","小红");
builder.timeField("date",new Date());
}
builder.endObject();
BulkRequest request3 = new BulkRequest();
request3.add(new IndexRequest("index_text","doc","5")
.source(builder));
出现问题:java.lang.NoClassDefFoundError: org/elasticsearch...报错
原因:依赖不对 org.elasticsearch elasticsearch 依赖因与本地es版本相同(我使用的为6.3.1)
所需依赖如下(4个):
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.3.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.1</version>
</dependency>