TestElasticSearch4J
根据关键字进行分页查询
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
|
package
com.how2java;
import
java.io.IOException;
import
java.util.HashMap;
import
java.util.List;
import
java.util.Map;
import
org.apache.http.HttpHost;
import
org.elasticsearch.ElasticsearchStatusException;
import
org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import
org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import
org.elasticsearch.action.admin.indices.open.OpenIndexRequest;
import
org.elasticsearch.action.bulk.BulkRequest;
import
org.elasticsearch.action.delete.DeleteRequest;
import
org.elasticsearch.action.get.GetRequest;
import
org.elasticsearch.action.get.GetResponse;
import
org.elasticsearch.action.index.IndexRequest;
import
org.elasticsearch.action.search.SearchRequest;
import
org.elasticsearch.action.search.SearchResponse;
import
org.elasticsearch.action.update.UpdateRequest;
import
org.elasticsearch.client.RestClient;
import
org.elasticsearch.client.RestHighLevelClient;
import
org.elasticsearch.common.unit.Fuzziness;
import
org.elasticsearch.index.query.MatchQueryBuilder;
import
org.elasticsearch.search.SearchHit;
import
org.elasticsearch.search.SearchHits;
import
org.elasticsearch.search.builder.SearchSourceBuilder;
import
org.elasticsearch.search.sort.ScoreSortBuilder;
import
org.elasticsearch.search.sort.SortOrder;
public
class
TestElasticSearch4J {
private
static
RestHighLevelClient client =
new
RestHighLevelClient(
RestClient.builder(
new
HttpHost(
"localhost"
,
9200
,
"http"
)
));
private
static
String indexName =
"how2java"
;
public
static
void
main(String[] args)
throws
IOException {
String keyword =
"时尚连衣裙"
;
int
start =
0
;
int
count =
10
;
SearchHits hits = search(keyword, start, count);
SearchHit[] searchHits = hits.getHits();
for
(SearchHit hit : searchHits) {
System.out.println(hit.getSourceAsString());
}
client.close();
}
private
static
SearchHits search(String keyword,
int
start,
int
count)
throws
IOException {
SearchRequest searchRequest =
new
SearchRequest(indexName);
SearchSourceBuilder sourceBuilder =
new
SearchSourceBuilder();
//关键字匹配
MatchQueryBuilder matchQueryBuilder =
new
MatchQueryBuilder(
"name"
,keyword );
//模糊匹配
matchQueryBuilder.fuzziness(Fuzziness.AUTO);
sourceBuilder.query(matchQueryBuilder);
//第几页
sourceBuilder.from(start);
//第几条
sourceBuilder.size(count);
searchRequest.source(sourceBuilder);
//匹配度从高到低
sourceBuilder.sort(
new
ScoreSortBuilder().order(SortOrder.DESC));
SearchResponse searchResponse = client.search(searchRequest);
SearchHits hits = searchResponse.getHits();
return
hits;
}
private
static
void
batchInsert(List<Product> products)
throws
IOException {
// TODO Auto-generated method stub
BulkRequest request =
new
BulkRequest();
for
(Product product : products) {
Map<String,Object> m = product.toMap();
IndexRequest indexRequest=
new
IndexRequest(indexName,
"product"
, String.valueOf(product.getId())).source(m);
request.add(indexRequest);
}
client.bulk(request);
System.out.println(
"批量插入完成"
);
}
private
static
void
deleteDocument(
int
id)
throws
IOException {
DeleteRequest deleteRequest =
new
DeleteRequest (indexName,
"product"
, String.valueOf(id));
client.delete(deleteRequest);
System.out.println(
"已经从ElasticSearch服务器上删除id="
+id+
"的文档"
);
}
private
static
void
updateDocument(Product product)
throws
IOException {
UpdateRequest updateRequest =
new
UpdateRequest (indexName,
"product"
, String.valueOf(product.getId()))
.doc(
"name"
,product.getName());
client.update(updateRequest);
System.out.println(
"已经在ElasticSearch服务器修改产品为:"
+product);
}
private
static
void
getDocument(
int
id)
throws
IOException {
// TODO Auto-generated method stub
GetRequest request =
new
GetRequest(
indexName,
"product"
,
String.valueOf(id));
GetResponse response = client.get(request);
if
(!response.isExists()){
System.out.println(
"检查到服务器上 "
+
"id="
+id+
"的文档不存在"
);
}
else
{
String source = response.getSourceAsString();
System.out.print(
"获取到服务器上 "
+
"id="
+id+
"的文档内容是:"
);
System.out.println(source);
}
}
private
static
void
addDocument(Product product)
throws
IOException {
Map<String, Object> jsonMap =
new
HashMap<>();
jsonMap.put(
"name"
, product.getName());
IndexRequest indexRequest =
new
IndexRequest(indexName,
"product"
, String.valueOf(product.getId()))
.source(jsonMap);
client.index(indexRequest);
System.out.println(
"已经向ElasticSearch服务器增加产品:"
+product);
}
private
static
boolean
checkExistIndex(String indexName)
throws
IOException {
boolean
result =
true
;
try
{
OpenIndexRequest openIndexRequest =
new
OpenIndexRequest(indexName);
client.indices().open(openIndexRequest).isAcknowledged();
}
catch
(ElasticsearchStatusException ex) {
String m =
"Elasticsearch exception [type=index_not_found_exception, reason=no such index]"
;
if
(m.equals(ex.getMessage())) {
result =
false
;
}
}
if
(result)
System.out.println(
"索引:"
+indexName +
" 是存在的"
);
else
System.out.println(
"索引:"
+indexName +
" 不存在"
);
return
result;
}
private
static
void
deleteIndex(String indexName)
throws
IOException {
DeleteIndexRequest request =
new
DeleteIndexRequest(indexName);
client.indices().delete(request);
System.out.println(
"删除了索引:"
+indexName);
}
private
static
void
createIndex(String indexName)
throws
IOException {
// TODO Auto-generated method stub
CreateIndexRequest request =
new
CreateIndexRequest(indexName);
client.indices().create(request);
System.out.println(
"创建了索引:"
+indexName);
}
}
|
下载地址:http://download.how2j.cn/1704/elasticsearch4j.rar