elasticsearch 口水篇(3)java客户端

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.

[http://www.searchly.com/documentation/developer-api-guide/java-jest/]

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

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();
		}
	}

  

原文地址:https://www.cnblogs.com/huangfox/p/3542858.html