【发布时间】:2015-08-21 02:11:10
【问题描述】:
我们使用elasticsearch动态映射,java文件如下。
@Document(indexName = "test", type = "test", shards = 1, replicas = 0)
public class ElasticSearchIndexObject {
private @Id
@Indexed
String id;
private @Indexed("name")
String name;
}
我们使用每 60 分钟运行一次的调度程序从数据库中获取数据并添加到索引中。
Connection 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_QUERY);
int i=1;
while (rs.next()) {
ElasticSearchIndexObject indexObj = new ElasticSearchIndexObject();
indexObj.setName(rs.getString("name"));
indexObj.setId(rs.getString("id"));
indexObjects.add(indexObj);
i=i+1;
}
elasticSearchObjectIndexRepository.save(indexObjects);
indexObjects.clear();
}
此调度程序每 60 分钟运行一次并添加/更新索引。
添加 - 如果 id 不在索引中 更新 - 如果 id 已经存在于索引中
问题在于数据库中已删除的记录。这些记录不会从索引中删除,而是成为孤立记录。
我遇到了“ttl”属性,并正在寻找一种方法将其添加到索引中,以便在 ttl 时间后删除孤立记录。
如果 ttl 不添加到每个索引,它应该在所有文档的通用级别吗?如果是这样,我应该为每个计划运行设置这个吗?
谢谢,
【问题讨论】:
标签: elasticsearch spring-data-elasticsearch