使用 Java API 操作 elasticsearch

maven 依赖


<dependencies>
	<!-- https://mvnrepository.com/artifact/junit/junit -->
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.12</version>
		<scope>test</scope>
	</dependency>

	<dependency>
		<groupId>org.elasticsearch</groupId>
		<artifactId>elasticsearch</artifactId>
		<version>5.2.2</version>
	</dependency>

	<dependency>
		<groupId>org.elasticsearch.client</groupId>
		<artifactId>transport</artifactId>
		<version>5.2.2</version>
	</dependency>

	<dependency>
		<groupId>org.apache.logging.log4j</groupId>
		<artifactId>log4j-core</artifactId>
		<version>2.9.0</version>
	</dependency>
</dependencies>

 

代码示例


获取 client

@Before
public void getClient() throws UnknownHostException {
	Settings settings = Settings.builder().put("cluster.name", "my-application").build();
	client = new PreBuiltTransportClient(settings);
	client.addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress("112.124.1.100", 9300)));
}

 

 

创建 Index

@Test
public void createIndex() {
//  创建一个名称为 blog 的索引
	CreateIndexResponse response = client.admin().indices().prepareCreate("blog").execute().actionGet();
}

 

删除 Index

@Test
public void deleteIndex() {
//	删除名为 blog 的 Index
	DeleteIndexResponse response = client.admin().indices().prepareDelete("blog").execute().actionGet();
}

 

创建 Document

@Test
public void createDocument() {
	String source = "{\"content\": \"我是内容!\"}";
	IndexResponse response = client.prepareIndex("blog", "article", "1").setSource(source).execute().actionGet();
}
@Test
public void createDocument() throws IOException {
	XContentBuilder builder = XContentFactory.jsonBuilder().startObject().field("name", "姜春波").endObject();
	IndexResponse response = client.prepareIndex("blog", "article", "2").setSource(builder).execute().actionGet();
}

 

搜索 Document

@Test
public void get() {
	GetResponse response = client.prepareGet("blog", "article", "2").execute().actionGet();
	System.out.println(response.getSourceAsString());
}
@Test
public void getMulti() {
//		获取多个索引
	MultiGetResponse response = client.prepareMultiGet()
			.add("blog", "article", "2")
			.add("blog", "article", "1")
			.execute().actionGet();
//		获取 Item Response 数组
	MultiGetItemResponse[] responses = response.getResponses();
//		遍历
	for (MultiGetItemResponse multiGetItemResponse : responses) {
		GetResponse response0 = multiGetItemResponse.getResponse();
		boolean exists = response0.isExists();
		if (exists) {
			System.out.println(response0.getSourceAsString());
		}
	}
}

 

 

更新 Document

如果 ES 的 Document 不存在,会抛异常;如果 ES 的 field 不存在会自动补充。

@Test
public void updateDocument() throws IOException, InterruptedException, ExecutionException {
//		创建 UpdateRequest
	UpdateRequest updateRequest = new UpdateRequest("blog", "article", "1");
	updateRequest.doc(XContentFactory.jsonBuilder().startObject()
			.field("id", "2")
			.field("title", "Java 成神之路")
			.field("content", "无字")
			.endObject());
	client.update(updateRequest).get();
}

 

更新 or 保存 Document

@Test
public void updateOrSave() throws IOException, InterruptedException, ExecutionException {
//		创建 source
	XContentBuilder source = XContentFactory.jsonBuilder().startObject()
		.field("id", "2")
		.field("title", "呵呵哒")
		.field("content", "看片").endObject();
	IndexRequest request = new IndexRequest("blog", "article", "1").source(source);
	UpdateRequest updateRequest = new UpdateRequest("blog", "article", "1")
			.doc(source).upsert(request);
	updateRequest.doc(source);
	client.update(updateRequest).get();
}

 

删除 Document

@Test
public void delete() {
	DeleteResponse response = client.prepareDelete("blog", "article", "4").get();
}

 

 

条件查询

全部查询

@Test
public void search() {
	SearchResponse response = client.prepareSearch("blog").setTypes("article").setQuery(QueryBuilders.matchAllQuery()).get();
	SearchHits hits = response.getHits();
	System.out.println("查询" + hits.getTotalHits());
	Iterator<SearchHit> iterator = hits.iterator();
	while(iterator.hasNext()) {
		SearchHit next = iterator.next();
		System.out.println(next.getSourceAsString());
	}
}

分词查询

@Test
public void search2() {
	SearchResponse response = client.prepareSearch("blog").setTypes("article")
			.setQuery(QueryBuilders.queryStringQuery("看毛片啊")).get();
	SearchHits hits = response.getHits();
	System.out.println("查询" + hits.getTotalHits());
	Iterator<SearchHit> iterator = hits.iterator();
	while (iterator.hasNext()) {
		SearchHit next = iterator.next();
		System.out.println(next.getSourceAsString());
	}
}

词条查询

@Test
public void search3() {
	SearchResponse response = client.prepareSearch("blog").setTypes("article")
			.setQuery(QueryBuilders.termQuery("content", "看片")).get();
	SearchHits hits = response.getHits();
	System.out.println("查询" + hits.getTotalHits());
	Iterator<SearchHit> iterator = hits.iterator();
	while (iterator.hasNext()) {
		SearchHit next = iterator.next();
		System.out.println(next.getSourceAsString());
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罐装面包

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值