ElasticSearch java客戶端簡單實例

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>hui</groupId>
	<artifactId>Lucene</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>Lucene</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
		</dependency>

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

		<dependency>
			<groupId>org.json</groupId>
			<artifactId>json</artifactId>
			<version>20160212</version>
		</dependency>



	</dependencies>
</project>

1.實體類:Person.java

package entity;

public class Person {
	private String name;
	private int age;
	private Double salary;

	public Person() {

	}

	public Person(String name, int age, Double salary) {
		super();
		this.name = name;
		this.age = age;
		this.salary = salary;
	}

	public Double getSalary() {
		return salary;
	}

	public void setSalary(Double salary) {
		this.salary = salary;
	}

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

	@Override
	public String toString() {
		return name + "--" + age + "--" + salary;
	}
}


2.工具類:JsonUtils.java:

package util;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import org.json.JSONObject;

import entity.Person;

public class JsonUtils {
	public static void main(String[] args) {
		Person person = new Person("hui", 20, 10000.0);

		System.out.println(covertObject2String(person));
		// {"name":"hui","salary":10000,"age":20}

		List<Person> persons = getData(10);
		System.out.println(covertList2String(persons));
		// [{"name":"hui1","salary":10000.39982635574,"age":8},{"name":"hui2","salary":10000.160206564933,"age":11},{"name":"hui3","salary":10000.417013742277,"age":28},{"name":"hui4","salary":10000.26786620842,"age":7},{"name":"hui5","salary":10000.114354566498,"age":21},{"name":"hui6","salary":10000.80371554496,"age":28},{"name":"hui7","salary":10000.553731464302,"age":20},{"name":"hui8","salary":10000.529595425674,"age":0},{"name":"hui9","salary":10000.249770191353,"age":14},{"name":"hui10","salary":10000.023515161884,"age":25}]

	}

	public static String covertObject2String(Object obj) {

		JSONObject object = new JSONObject(obj);
		return object.toString();
	}

	public static List<String> covertList2String(List<? extends Object> objs) {

		List<String> list = new ArrayList<>();
		for (Object obj : objs) {
			list.add(covertObject2String(obj));
		}

		return list;
	}

	public static List<Person> getData(int num) {

		List<Person> persons = new ArrayList<>();
		Random rand = new Random(47);
		for (int i = 1; i <= num; i++) {
			String name = "hui" + i;
			int age = rand.nextInt(30);
			Double salary = rand.nextDouble() + 10000;
			Person p = new Person(name, age, salary);
			persons.add(p);
		}
		return persons;
	}
}

3.核心ES測試類ESTest.java:

package elasticSearch;

import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.elasticsearch.action.index.IndexRequestBuilder;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;

import entity.Person;
import util.JsonUtils;

public class ESTest {

	private Client client;

	public ESTest() {
		this("localhost");
	}

	public ESTest(String ip) {
		Settings settings = Settings.settingsBuilder().put("cluster.name", "huiTest")
				.build();
		//這裏的cluster.name是在ES的安裝目錄的config文件下的elasticsearch.yml配置的,
		//即在該文件中添加:cluster.name:huiTest,若是未配置,
		//這裏要寫成put("cluster.name", "elasticsearch"),由於cluster.name默認是elasticsearch,
		//或者能夠不寫這部分,即put()這一方法不用
		
		client = TransportClient.builder().settings(settings).build();
		client = ((TransportClient) client).addTransportAddress(
				new InetSocketTransportAddress(new InetSocketAddress(ip, 9300)));

	}

	public IndexResponse createIndex(String indexName, String type,
			List<String> jsonArray) {

		IndexRequestBuilder builder = client.prepareIndex(indexName, type);
		for (String jsonTemp : jsonArray) {
			System.out.println(jsonTemp);
			builder = builder.setSource(jsonTemp);
		}
		IndexResponse response = builder.execute().actionGet();
		return response;

	}

	public List<Person> search(QueryBuilder queryBuilder, String indexName, String type) {
		List<Person> persons = new ArrayList<>();

		SearchResponse sResponse = client.prepareSearch(indexName).setTypes(type)
				.setQuery(queryBuilder).execute().actionGet();
		SearchHits hits = sResponse.getHits();

		System.out.println(hits.getTotalHits());
		Double salary = 0.0;
		SearchHit[] hitArray = hits.hits();
		for (SearchHit hit : hitArray) {
			Map<String, Object> map = hit.getSource();

			Integer age = (Integer) map.get("age");
			String name = (String) map.get("name");
			Object salaryO = map.get("salary");
			if (salaryO instanceof Integer) {
				salary = (Integer) salaryO * 1.0;
			} else {
				salary = (Double) salaryO;
			}
			Person p = new Person(name, age, salary);

			persons.add(p);
		}
		return persons;
	}

	public static void main(String[] args) {
		ESTest esTest = new ESTest();

		List<Person> persons = JsonUtils.getData(10);
		List<String> jsonArray = JsonUtils.covertList2String(persons);

		//先建立索引
		String indexName = "liuhui'sindex";// 要小寫
		String type = "liuhui'sType";
		esTest.createIndex(indexName, type, jsonArray);

		//接着搜索
		// QueryBuilder builder = QueryBuilders.matchAllQuery();匹配全部
		// QueryBuilder builder = QueryBuilders.termQuery("name", "hui10");
		QueryBuilder builder = QueryBuilders.termQuery("age", "20");

		List<Person> list = esTest.search(builder, indexName, type);
		System.out.println(list);

	}

}
相關文章
相關標籤/搜索