spring boot 集成 elasticsearch 7.x (二)

继续上一篇,上一篇创建好索引后,就开始操作文档了。

插入或者更新文档

文档,就相当于关系型数据库里的表的行记录。
创建好索引后,就可以开始,将文档索引进索引里。
show code:

/**
     * @param idxName index
     * @param entity  对象
     * @return void
     */
    public void insertOrUpdateOne(String idxName, ElasticEntity entity) {
        IndexRequest request = new IndexRequest(idxName);
        log.info("Data : id={},entity={}", entity.getId(), JSON.toJSONString(entity.getData()));
        request.id(entity.getId());
        request.source(JSON.toJSONString(entity.getData()), XContentType.JSON);
        try {
            restHighLevelClient.index(request, RequestOptions.DEFAULT);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

删除文档

类似的,有插入文档,就有对应的删除文档数据。



    /**
     * @param idxName index
     * @param entity  对象
     * @return void
     */
    public boolean deleteOne(String idxName, ElasticEntity entity) {
        DeleteRequest request = new DeleteRequest(idxName);
        request.id(entity.getId());
        try {
            restHighLevelClient.delete(request, RequestOptions.DEFAULT);
        } catch (Exception e) {
            log.error("删除索引异常,metadataVo={},异常信息={}", entity.toString(), e.getMessage());
            throw new RuntimeException(e);
        }
        return true;
    }

批量插入

类似关系型数据库,有批量插入记录。
对应的也可以往 elasticsearch 里 批量插入文档。

注:es 的批量插入一次性最好不要超过 1000 条数据。

    /**
     * 批量插入数据
     *
     * @param idxName index
     * @param list    带插入列表
     * @return void
     */
    public void insertBatch(String idxName, List<ElasticEntity> list) {
        BulkRequest request = new BulkRequest();
        list.forEach(item -> request.add(new IndexRequest(idxName).id(item.getId())
                .source(JSON.toJSONString(item.getData()), XContentType.JSON)));
        try {
            restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

批量删除

同样的,可以根据文档 id,批量删除数据。
这里的前提是,在插入文档时,文档的 id 是由我们指定的,这样才可以知道文档的id。

/**
     * 批量删除
     *
     * @param idxName index
     * @param idList  待删除列表
     * @return void
     */
    public <T> void deleteBatch(String idxName, Collection<T> idList) {
        BulkRequest request = new BulkRequest();
        idList.forEach(item -> request.add(new DeleteRequest(idxName, item.toString())));
        try {
            restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

数据存储对象


/**
 * @ClassName ElasticEntity
 * @Description  数据存储对象
 * @author
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ElasticEntity<T> {

    /**
     * 主键标识,用户ES持久化
     */
    private String id;

    /**
     * JSON对象,实际存储数据
     */
    private Map data;
}

你可能感兴趣的:(elasticsearch)