java jest_elasticsearch 口水篇(3)java客户端 - Jest

elasticsearch有丰富的客户端,java客户端有Jest。其原文介绍如下:

Jest is a Java HTTP Rest client for ElasticSearch.It is actively developed and tested by Searchly.

A sample Java application using Jest can be found on GitHub https://github.com/searchbox-io/java-jest-sample.

下面我们做一个很简单的实例,以下几个功能:

1)批量添加1000个user对象;

2)通过id进行查询;

3)通过name进行查询;

user对象定义:

package com.fox.c1;

import io.searchbox.annotations.JestId;

/**

* @author huangfox

* @date 2014年1月22日 下午5:31:52

*

*/

public class User {

@JestId

private Long id;

private String name;

private int age;

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

简单实现一个工厂类,用来获得JestHttpClient,如下:

package com.fox.c1;

import io.searchbox.client.JestClientFactory;

import io.searchbox.client.config.HttpClientConfig;

import io.searchbox.client.http.JestHttpClient;

/**

* @author huangfox

* @date 2014年1月22日 下午5:16:15

*

*/

public class ESFactory {

private static JestHttpClient client;

private ESFactory() {

}

public synchronized static JestHttpClient getClient() {

if (client == null) {

JestClientFactory factory = new JestClientFactory();

factory.setHttpClientConfig(new HttpClientConfig.Builder(

"http://localhost:9200").multiThreaded(true).build());

client = (JestHttpClient) factory.getObject();

}

return client;

}

public static void main(String[] args) {

JestHttpClient client = ESFactory.getClient();

System.out.println(client.getAsyncClient());

System.out.println(client.getServers());

client.shutdownClient();

}

}

测试类:

package com.fox.c1;

import io.searchbox.client.JestResult;

import io.searchbox.client.http.JestHttpClient;

import io.searchbox.core.Get;

import io.searchbox.core.Index;

import io.searchbox.core.Search;

import io.searchbox.indices.CreateIndex;

import io.searchbox.indices.DeleteIndex;

import java.io.IOException;

import org.elasticsearch.index.query.QueryBuilders;

import org.elasticsearch.search.builder.SearchSourceBuilder;

/**

* @author huangfox

* @date 2014年1月22日 下午5:32:20

*

*/

public class ESTest {

private JestHttpClient client = ESFactory.getClient();

/**

* indexing

*

* @param indexName

*/

public void index(String indexName) {

try {

// drop

DeleteIndex dIndex = new DeleteIndex(new DeleteIndex.Builder(

indexName));

client.execute(dIndex);

// create

CreateIndex cIndex = new CreateIndex(new CreateIndex.Builder(

indexName));

client.execute(cIndex);

// add doc

for (int i = 0; i < 1000; i++) {

User user = new User();

user.setId(new Long(i));

user.setName("huang fox " + i);

user.setAge(i % 100);

Index index = new Index.Builder(user).index(indexName)

.type(indexName).build();

client.execute(index);

}

//

client.shutdownClient();

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* getting by id

*

* @param indexName

* @param query

*/

public void get(String indexName, String query) {

Get get = new Get.Builder(indexName, query).build();

try {

JestResult rs = client.execute(get);

System.out.println(rs.getJsonString());

//

client.shutdownClient();

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* query

*

* @param query

*/

public void search(String query) {

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

searchSourceBuilder.query(QueryBuilders.queryString(query));

searchSourceBuilder.field("name");

Search search = new Search.Builder(searchSourceBuilder.toString())

.build();

try {

JestResult rs = client.execute(search);

System.out.println(rs.getJsonString());

//

client.shutdownClient();

} catch (IOException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

ESTest t = new ESTest();

String indexName = "user";

// indexing

t.index(indexName);

// getting by id

t.get(indexName, "2");

// query

String query = "fox";

t.search(query);

}

}

index 批量添加建议使用bulk,效率高(减少通讯次数):

public void indexBulk(String indexName) {

try {

// drop

DeleteIndex dIndex = new DeleteIndex(new DeleteIndex.Builder(

indexName));

client.execute(dIndex);

// create

CreateIndex cIndex = new CreateIndex(new CreateIndex.Builder(

indexName));

client.execute(cIndex);

// add doc

Bulk.Builder bulkBuilder = new Bulk.Builder();

for (int i = 0; i < 1000; i++) {

User user = new User();

user.setId(new Long(i));

user.setName("huang fox " + i);

user.setAge(i % 100);

Index index = new Index.Builder(user).index(indexName)

.type(indexName).build();

bulkBuilder.addAction(index);

}

client.execute(bulkBuilder.build());

//

client.shutdownClient();

} catch (IOException e) {

e.printStackTrace();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值