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