弹性搜索完全导入

时间:2015-05-05 13:55:35

标签: elasticsearch spring-data

我们在项目中使用弹性搜索,我们遵循推送方法。 我们有一个每隔30分钟运行一次的调度程序,并从表中读取数据,并使用Spring Data Elastic Search将其推送到Elastic Search。

Collection<ElasticSearchIndexObj> indexObjs = new ArrayList<>();

Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            conn = dataSource.getConnection();

            stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
            stmt.setFetchSize(FETCH_SIZE);          
            rs =  stmt.executeQuery(ESEARCH_FULL_IMPORT_QUERY);

            int i=1;
            while (rs.next()) {
                ElasticSearchIndexObj indexObj = new ElasticSearchIndexObj();
                indexObj.setName("Raja");


                indexObjs .add(indexObj);

                if (i % FETCH_SIZE == 0) {
                    elasticSearchObjIndexRepository.save(indexObjs);
                    indexObjs.clear();
                }               
                i=i+1;
            }           
            elasticSearchSecurityIndexRepository.save(indexObjs);
            indexObjs.clear();

我们读取整个表格并每隔30分钟插入弹性搜索,以使索引数据与表格保持同步。该表由其他一些团队拥有。

怀疑: - 从表中删除了行。现在,当我选择*时,我将无法获取已删除的记录。但是,那些记录仍然存在于弹性搜索中,这些记录将成为搜索中的陈旧数据。如何在插入作为计划的一部分之前删除弹性搜索中的所有记录,而不影响前屏幕中的搜索。

无论如何我可以在这里使用交易,所以我会删除所有,保存并最终提交。

谢谢, Baskar.S

1 个答案:

答案 0 :(得分:2)

您可以使用弹性搜索的删除API删除索引。

$ curl -XDELETE 'http://localhost:9200/index_name

要删除所有索引,您可以使用*或_all。
要在java中使用相同的东西,你必须执行此查询

DeleteResponse response = client.prepareDelete().execute().actionGet();  

此致