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
