/**
* 官方文档:https:///guide/en/elasticsearch/client/java-rest/current/java-rest-high-supported-apis.html
*/
public abstract class ISearchServiceImpl<T extends ISearchModel> implements ISearchService<T> catch (IOException e)
}
@Override
public Boolean existsIndex(String indexName)
GetIndexRequest getIndexRequest = new GetIndexRequest(indexName);
try catch (IOException e)
}
/**
* 文档:https:///guide/en/elasticsearch/client/java-rest/master/java-rest-high-create-index.html
*
* @param sourceStr
* @return
*/
@Override
public Boolean createIndex(String sourceStr) {
// 实现类泛型中的类对象
Class<T> clazz = this.entityClass();
IndexDefinition IndexDefinition = this.parseEsAnno(clazz);
CreateIndexRequest indexRequest = new CreateIndexRequest(IndexDefinition.index());
indexRequest.source(sourceStr, XContentType.JSON);
try {
CreateIndexResponse indexResponse = esClient.indices().create(indexRequest, RequestOptions.DEFAULT);
return indexResponse.isAcknowledged();
} catch (IOException e)
}
@Override
public Boolean saveEntity(T entity) catch (IOException e)
}
@Override
public void saveEntityAsy(T entity, ActionListener listener)
@Override
public Boolean saveBatch(Collection<T> entities)
try catch (IOException e)
}
@Override
public T selectById(String id)
return entity;
} catch (IOException e)
}
@Override
public List<T> listByIds(Collection<String> ids)
try catch (IOException e)
}
@Override
public Boolean updateById(T entity) catch (IOException e)
}
@Override
public void updateByIdAsy(T entity, ActionListener listener)
@Override
public Boolean deleteById(String id) catch (IOException e)
}
@Override
public void deleteByIdAsy(String id, ActionListener listener) {
// 获取Service接口中泛型的实体类型
Class<T> entityClazz = this.entityClass();
// 解析索引信息
IndexDefinition index = this.parseEsAnno(entityClazz);
DeleteRequest deleteRequest = new DeleteRequest(index.index());
delete(id);
esClient.deleteAsync(deleteRequest, RequestOptions.DEFAULT, listener);
}
@Override
public Boolean deleteByIds(Collection<String> ids) {
// 获取Service接口中泛型的实体类型
Class<T> entityClazz = this.entityClass();
// 解析索引信息
IndexDefinition index = this.parseEsAnno(entityClazz);
BulkRequest bulkRequest = new BulkRequest(index.index());
for (String id : ids) {
DeleteRequest deleteRequest = new DeleteRequest().id(id);
bulkRequest.add(deleteRequest);
}
try catch (IOException e)
}
@Override
public List<T> search(SearchSourceBuilder searchSource, RequestOptions options) catch (IOException e)
}
@Override
public Page<T> pageQuery(Page<T> page, SearchSourceBuilder searchSource) {
// 获取Service接口中泛型的实体类型
Class<T> entityClazz = this.entityClass();
SearchRequest searchRequest = this.searchBuilder();
searchRequest.source(searchSource);
return this.page(page, searchRequest, entityClazz);
}
@Override
public Page<T> pageQuery(Page<T> page, SearchSourceBuilder searchSource, String... indices) {
// 获取Service接口中泛型的实体类型
Class<T> entityClazz = this.entityClass();
SearchRequest searchRequest = this.searchBuilder(indices);
searchRequest.source(searchSource);
return this.page(page, searchRequest, entityClazz);
}
private Page<T> page(Page<T> page, SearchRequest searchRequest, Class<T> entityClazz) )
.collect(Collectors.toList());
page.setTotal(total).setRecords(entities).setSize(entities.size());
} catch (IOException e)
return page;
}
SearchRequest searchBuilder(String... indices) {
SearchRequest searchRequest = new SearchRequest(indices);
return searchRequest;
}
SearchRequest searchBuilder() {
// 获取Service接口中泛型的实体类型
Class<T> entityClazz = this.entityClass();
// 解析索引信息
IndexDefinition index = this.parseEsAnno(entityClazz);
return this.searchBuilder(index.index());
}
/**
* 抽取距离查询的封装语句(坐标对象字段和规定的一致才能使用此方法)
*
* @param search
* @param bool
* @param lat
* @param lon
* @param distance
*/
protected void buildGeo(SearchSourceBuilder search, BoolQueryBuilder bool, Double lat, Double lon, Long distance) {
// 按距离范围筛选
GeoDistanceQueryBuilder locationQuery = new GeoDistanceQueryBuilder("location");
locationQuery.point(lat, lon);
locationQuery.distance(distance, DistanceUnit.METERS);
bool.filter(locationQuery);
// 按距离排序
GeoDistanceSortBuilder locationSort = new GeoDistanceSortBuilder("location", lat, lon);
locationSort.unit(DistanceUnit.METERS);
locationSort.order(SortOrder.ASC);
search.sort(locationSort);
}
/**
* 解析实体类映射ES的库表
*
* @param clazz ES实体bean的类信息
* @return
*/
@SneakyThrows
protected IndexDefinition parseEsAnno(Class<? extends ISearchModel> clazz)
ISearchDocument esAnno = clazz.getAnnotation(ISearchDocument.class);
String index = esAnno.indexName();
if (Objects.equals(index, ""))
String type = esAnno.type();
if (Objects.equals(type, ""))
IndexDefinition indexModel = new IndexDefinition().index(index).type(type);
return indexModel;
}
/**
* 获取调用方法实现类中泛型的具体类对象
*
* @return
*/
protected Class<T> entityClass()
}
chx用什么配置Spring项目整合 ES (干货)
未经允许不得转载:上海聚慕医疗器械有限公司 » chx用什么配置Spring项目整合 ES (干货)









