从索引定义开始
- 定义数据的模型(嵌套表 父子表)
- 创建es的索引
- 创建mapping
- 导入数据
- 执行查询
ElasticsearchTemplate
创建索引
/**
* 创建索引
* @return
*/
public boolean createIndex() {
if (!elasticsearchTemplate.indexExists(tClass)) {
log.debug("es中不存在,开始创建索引!");
elasticsearchTemplate.createIndex(tClass);
}
return true;
}
创建mapping
/**
* 修改mapping操作
* @return
*/
public boolean addOrUpdateMapping() {
log.debug("开始创建mapping");
return elasticsearchTemplate.putMapping(tClass);
}
导入数据
/**
* 批量新增数据
* @return
*/
public boolean putData(List<T> list) {
if (list.size() == 0) {
return false;
}
List<IndexQuery> queries = new ArrayList<>();
list.forEach(each -> queries.add(new IndexQueryBuilder().withObject(each).build()));
elasticsearchTemplate.bulkIndex(queries);
return true;
}
执行查询
/**
* 查询数据,分页数据
*/
public PagingHelper<T> selectPage(List<BaseEsQueryParam> baseEsQueryParams, Pageable pageable, String[] fields, String sort,String sortOrder) {
//dsl语法 term range
//前段 json -> es dsl
// QueryBuilder 是es template的条件构造器 sql
QueryBuilder queryBuilder = buildFinalQuery(baseEsQueryParams);
log.info(EsUtils.getSearchQuerySource(queryBuilder));
NativeSearchQueryBuilder nativeSearchQueryBuilder =
new NativeSearchQueryBuilder()
.withFields(fields)
.withQuery(queryBuilder)
.withIndices(index)
.withPageable(pageable);
//增加排序字段
if (StringUtils.isNotEmpty(sort) && EsConstants.SORT_ORDER_DESC.equals(sortOrder)) {
nativeSearchQueryBuilder.withSort(new FieldSortBuilder(sort).order(SortOrder.DESC));
} else if (StringUtils.isNotEmpty(sort) && EsConstants.SORT_ORDER_ASC.equals(sortOrder)) {
nativeSearchQueryBuilder.withSort(new FieldSortBuilder(sort).order(SortOrder.ASC));
}
SearchQuery searchQuery = nativeSearchQueryBuilder.build();
PagingHelper<T> myPage = null;
try {
AggregatedPage<T> caseInfos = elasticsearchTemplate.queryForPage(searchQuery, tClass);
myPage = new PagingHelper<>();
myPage.fromEs(caseInfos);
} catch (Exception e) {
log.error("查询es报错", e);
}
return myPage;
}