从索引定义开始

  1. 定义数据的模型(嵌套表 父子表)
  2. 创建es的索引
  3. 创建mapping
  4. 导入数据
  5. 执行查询

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;

}