我们在我们的项目中使用Elastic Search,并遵循推送方法。我们有一个调度程序,它每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分钟读取整个表并插入到elastic search中,以保持索引数据与表的同步。这张桌子正被其他团队拥有。
怀疑:-已从表中删除行。现在,当我选择*时,我将不会得到已删除的记录。但是,这些记录在弹性搜索中仍然存在,这些记录将成为搜索中的陈旧数据。如何删除elastic search中的所有记录,然后将其作为计划的一部分插入,而不影响前屏中的搜索。
有没有我可以在这里使用transaction的方法,这样我就可以删除所有,保存并最终提交。
谢谢,Baskar.S
发布于 2015-05-30 02:04:06
您可以使用弹性搜索的delete接口删除索引。
$ curl -XDELETE 'http://localhost:9200/index_name
要删除所有索引,可以使用*或_all。
为了在java中使用相同的东西,您必须执行以下查询
DeleteResponse response = client.prepareDelete().execute().actionGet();
问候
https://stackoverflow.com/questions/30055027
复制相似问题