新增 index 类似表名,id就是主键,map是字段和内容
java
IndexRequest request=new IndexRequest(index).id(id).source(map);
IndexResponse response = client.index(request, RequestOptions.DEFAULT);
编辑
单个更新
java
// 创建XContentBuilder构建JSON内容(自动处理转义)
XContentBuilder builder = XContentFactory.jsonBuilder();
builder.startObject();
builder.field("title", esArchiveVo.getTitle());
builder.field("content", esArchiveVo.getContent());
builder.endObject();
// 构建更新请求,使用XContentBuilder而非字符串
UpdateRequest request = new UpdateRequest(index,id).doc(builder);
// 执行更新操作
UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
删除
java
DeleteRequest deleteRequest = new DeleteRequest(index,id);
DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);
分页查询
java
// 年份精确查询
if (year != null) {
TermQueryBuilder yearQuery = QueryBuilders.termQuery("year", year);
boolQueryBuilder.must(yearQuery);
}
// 月份精确查询
if (month != null) {
TermQueryBuilder monthQuery = QueryBuilders.termQuery("month", month);
boolQueryBuilder.must(monthQuery);
}
// 日期范围查询
RangeQueryBuilder dateRangeQuery = QueryBuilders.rangeQuery("date");
boolean hasDateCondition = false; // 标记是否有有效的日期条件
// 开始日期:>= startDate
if (StringUtils.isNotBlank(startDate)) {
archiveDateRangeQuery.gte(startDate); // gte = greater than or equal
hasDateCondition = true;
}
// 结束日期:<= endDate
if (StringUtils.isNotBlank(endDate)) {
archiveDateRangeQuery.lte(endDate); // lte = less than or equal
hasDateCondition = true;
}
// 如果有有效的日期条件,添加到查询中
if (hasDateCondition) {
boolQueryBuilder.must(archiveDateRangeQuery);
}
// 学生号模糊查询(修改为短语匹配)
if (StringUtils.isNotBlank(studentNum)) {
MatchPhraseQueryBuilder studentNumQuery =QueryBuilders.matchPhraseQuery("studentNum",studentNum);
boolQueryBuilder.must(agencyVolumeNumQuery);
}
builder.query(boolQueryBuilder);
builder.from((page-1)*limit);
builder.size(limit);
builder.highlighter(highlightBuilder);
builder.sort("title.keyword", SortOrder.ASC);
searchRequest.source(builder);
LinkedList<EsArchiveVo> archiveList = new LinkedList<>();
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
创建index 类似创建表 index自定义,如index=student
java
Settings settings = Settings.builder()
.put("index.number_of_shards", 3)
.put("index.number_of_replicas", 2)
.build();
String mapping = "{\n" +
" \"properties\": {\n" +
" \"id\": {\n" +
" \"type\": \"keyword\"\n" +
" },\n" +
" \"title\": {\n" +
" \"type\": \"text\",\n" +
" \"fields\": {\n" +
" \"keyword\": {\n" +
" \"type\": \"keyword\",\n" +
" \"ignore_above\": 256\n" +
" }\n" +
" }\n" +
" },\n" +
" \"content\": {\n" +
" \"type\": \"text\",\n" +
" \"fields\": {\n" +
" \"keyword\": {\n" +
" \"type\": \"keyword\",\n" +
" \"ignore_above\": 256\n" +
" }\n" +
" }\n" +
" },\n" +
" \"year\": {\n" +
" \"type\": \"integer\"\n" +
" },\n" +
" \"month\": {\n" +
" \"type\": \"integer\"\n" +
" },\n" +
" \"date\": {\n" +
" \"type\": \"date\",\n" +
" \"format\": \"yyyy-MM-dd\"\n" +
" },\n" +
" \"studentNum\": {\n" +
" \"type\": \"text\",\n" +
" \"fields\": {\n" +
" \"keyword\": {\n" +
" \"type\": \"keyword\",\n" +
" \"ignore_above\": 256\n" +
" }\n" +
" }\n" +
" },\n" +
" }\n" +
"}";
CreateIndexRequest indexRequest = new CreateIndexRequest(index)
.settings(settings).mapping(mapping, XContentType.JSON);
CreateIndexResponse response = null;
try {
response = client.indices().create(indexRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
log.info("错误信息", e);
throw new ServiceException(e.getMessage());
}
if (response != null) {
return response.isAcknowledged();
} else {
return false;
}
删除index,类似删表操作
java
DeleteIndexRequest request = new DeleteIndexRequest(index);
AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT);
response.isAcknowledged();
批量删除 根据mapping里的id字段批量删除 idList是List<String>格式
DeleteByQueryRequest request = new DeleteByQueryRequest(index);
request.setQuery(new TermsQueryBuilder("id", idList));
client.deleteByQuery(request, RequestOptions.DEFAULT);
批量更新
java
BulkRequest bulkRequest = new BulkRequest();
for (EsUpdateDto esUpdateDto: list){
try (XContentBuilder builder = XContentFactory.jsonBuilder()) {
builder.startObject();
// 动态添加非空字段
if (esUpdateDto.getYear() != null) {
builder.field("year", esUpdateDto.getYear());
}
if (esUpdateDto.getDate() != null && !esUpdateDto.getDate().isEmpty()) {
builder.field("date", esUpdateDto.getDate());
}
builder.endObject();
// 构建更新请求
UpdateRequest request = new UpdateRequest(index, esUpdateDto.getId())
.doc(builder); // 使用XContentBuilder而非字符串
builder.close();
bulkRequest.add(request);
} catch (Exception e) {
log.error("构建更新请求失败, ID: {}", esUpdateDto.getId(), e);
throw new ServiceException(e);
}
}
try{
// 执行批量更新
BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
// 处理响应
if (bulkResponse.hasFailures()) {
// 处理失败请求
bulkResponse.forEach(item -> {
if (item.isFailed()) {
log.error("更新失败 - ID: " + item.getId() + ", 错误: " +
item.getFailureMessage());
}
});
} else {
log.info("✅ 批量更新成功,共更新 " + bulkResponse.getItems().length + " 个文档");
}
catch (Exception e){
e.printStackTrace();
throw new ServiceException(e.getMessage());
}
根据id查询数据
GetRequest getRequest = new GetRequest(index,id);
GetResponse response = client.get(getRequest, RequestOptions.DEFAULT);
response.getSource();