Мы используем динамическое сопоставление эластичного поиска, и файл 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 минут и добавляет/обновляет индекс.
Добавить — если идентификатора нет в индексе. Обновить — если идентификатор уже есть в индексе.
Проблема с удаленными записями в базе данных. Эти записи не удаляются из индекса и становятся потерянными записями.
Я наткнулся на свойство «ttl» и искал способ добавить его в индекс, чтобы потерянные записи удалялись по истечении времени ttl.
Если ttl не добавляется к каждому индексу, должен ли он быть на общем уровне для всех документов? Если да, должен ли я установить это для каждого запуска расписания?
Спасибо,