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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章