我们在项目中使用弹性搜索,我们遵循推送方法。 我们有一个每隔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
答案 0 :(得分:2)
您可以使用弹性搜索的删除API删除索引。
$ curl -XDELETE 'http://localhost:9200/index_name
要删除所有索引,您可以使用*或_all。
要在java中使用相同的东西,你必须执行此查询
DeleteResponse response = client.prepareDelete().execute().actionGet();
此致