使用Elasticsearch第三方包Bboss批量提交新增、修改、刪除請求

思路

使用Bboss的Http請求,核心還是ES原生的http請求接口,自己懶得寫,直接使用Bboss封裝好的

maven依賴

		<dependency>
            <groupId>com.bbossgroups.plugins</groupId>
            <artifactId>bboss-elasticsearch-rest-jdbc</artifactId>
            <version>5.5.1</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

代碼

輔助類

/**
 * 批量提交ES請求輔助類
 * @author yanyl
 * @date 2019-06-03
 */
public class BulkCommitVO {
    //動作
    private String action;
    //索引名稱
    private String indexName;
    //type名稱
    private String typeName;
    //主鍵id
    private String id;
    //信息
    private String info;

    public String getAction() {
        return action;
    }

    public void setAction(String action) {
        this.action = action;
    }

    public String getIndexName() {
        return indexName;
    }

    public void setIndexName(String indexName) {
        this.indexName = indexName;
    }

    public String getTypeName() {
        return typeName;
    }

    public void setTypeName(String typeName) {
        this.typeName = typeName;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }
}

調用方法demo

批量寫入(新增、修改)

public Object asynCreateIndex(String platformId, Set<SolrIndexVO> vos) {
        final Set<SolrIndexVO> voset = new HashSet<>();
        final List<BulkCommitVO> bulkCommitVOList = new ArrayList<>();
        for(SolrIndexVO vo : vos) {
            setFieldsValue(vo);//設置站點名稱,欄目名稱,訪問鏈接,發佈狀態,排序時間
            if(!StringUtils.isEmpty(vo.getContent())) {
                vo.setAttachContent(getAttachContent(vo.getContent()).toString());//設置附件內容
                vo.setContent(HtmlUtil.getTextFromTHML(vo.getContent()));//設置文章內容
            }else {
                Object content = getArticleContent(vo.getId());
                if(content != null) {
                    vo.setAttachContent(getAttachContent(content.toString()).toString());//設置附件內容
                    vo.setContent(HtmlUtil.getTextFromTHML(content.toString()));//設置文章內容
                }
            }
            if(null != vo.getSiteId()) {
                voset.add(vo);
                BulkCommitVO bulkCommitVO = new BulkCommitVO();
                bulkCommitVO.setAction("index");
                if(!AppUtil.isEmpty(platformId)){
                    bulkCommitVO.setIndexName(platformId);
                }else {
                    bulkCommitVO.setIndexName(vo.getPlatformCode());
                }
                bulkCommitVO.setTypeName(vo.getSiteId().toString());
                bulkCommitVO.setId(vo.getId());
                bulkCommitVO.setInfo(JSON.toJSONStringWithDateFormat(vo,"yyyy-MM-dd HH:mm:ss",
                        SerializerFeature.WriteDateUseDateFormat));
                bulkCommitVOList.add(bulkCommitVO);
            }
        }
        taskExecutor.execute(() -> {
            logger.info("========啓動異步線程創建索引========");
            try {
                ResultVO resultVO = (ResultVO) BbossUtil.bulkIndex(bulkCommitVOList);
                if(resultVO.getStatus() == 1){
                    logger.info("========索引創建完成========");
                }else {
                    //保存索引創建失敗記錄
                    esErrService.saveEsCreateErrInfos(new ArrayList<>(voset));
                }
            }catch (Exception e){
                e.printStackTrace();
                //保存索引創建失敗記錄
                esErrService.saveEsCreateErrInfos(new ArrayList<>(voset));
            }
        });
        return new ResultVO();
    }

批量刪除demo

    /**
     * 批量刪除索引
     * @param data
     */
    private static void deletePublicIndex(List<?> data){
        if(data != null && data.size() > 0){
            List<BulkCommitVO> bulkCommitVOList = new ArrayList<>();
            String platformCode = "hefei_gova";
            for (Object o : data) {
                PublicContentVO eo = (PublicContentVO) o;
                //構造提交數據結構
                BulkCommitVO bulkCommitVO = new BulkCommitVO();
                bulkCommitVO.setAction("delete");
                bulkCommitVO.setIndexName(platformCode);
                bulkCommitVO.setTypeName(eo.getSiteId() + "");
                bulkCommitVO.setId(eo.getContentId() + "");
                bulkCommitVOList.add(bulkCommitVO);
            }
            BbossUtil.bulkIndex(commitVOList);
        }
    }

底層調用Bboss

	/**
     * 批量創建/更新/刪除索引
     * @param bulkCommitVOList
     * @return
     */
    public static Object bulkIndex(List<BulkCommitVO> bulkCommitVOList){
        //創建es客戶端
        ClientInterface clientUtil = ElasticSearchHelper.getRestClientUtil();
        if(bulkCommitVOList.size()>0 && clientUtil.existIndice(bulkCommitVOList.get(0).getIndexName())){
            StringBuffer requestStr = new StringBuffer();
            for(int i=0;i<bulkCommitVOList.size();i++){
                requestStr.append("{ \""+bulkCommitVOList.get(i).getAction()+"\" : { \"_index\" : \""
                        +bulkCommitVOList.get(i).getIndexName()+"\", \"_type\" : \""+bulkCommitVOList.get(i).getTypeName()+"\", \"_id\" : \""
                        +bulkCommitVOList.get(i).getId()+"\" } }\n");
                if(!bulkCommitVOList.get(i).getAction().equals("delete")){
                    requestStr.append(bulkCommitVOList.get(i).getInfo()).append("\n");
                }
            }
            if(bulkCommitVOList.get(0).getAction().contains("delete")){
                System.out.println("requestStr=\n"+requestStr.toString());
            }
            String bulkStr = clientUtil.executeHttp("/_bulk",requestStr.toString(),"post");
            esLog.info(bulkStr);
            return new ResultVO(bulkStr);
        }
        return new ResultVO();
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章