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对象定义:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
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,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
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();
}
}
|
测试类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
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,效率高(减少通讯次数):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
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();
}
}
|
原文地址:http://www.cnblogs.com/huangfox/p/3542858.html