当前位置: 首页 > 知识库问答 >
问题:

弹性搜索动态java映射文件中的ttl(生存时间)--Spring数据弹性搜索

卫昊东
2023-03-14

我们使用弹性搜索动态映射,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();

        }

问题是数据库中已删除的记录。这些记录不会从索引中删除,而是成为孤立记录。

我遇到了“ttl”属性,并寻找一种方法将其添加到索引中,以便在ttl时间之后删除孤儿记录。

如果不将ttl添加到每个索引中,它是否应该是所有文档的通用级别?如果是,是否应该为每次调度运行设置此设置?

谢谢,

共有1个答案

佘辰龙
2023-03-14

确保索引类型已经配置了“_ttl”:{“enabled”:true}映射。然后在_source中传递文档的_ttl值。在POJO中添加这个字段:

@JsonInclude(value=Include.NON_EMPTY)  //to make it optional
@JsonProperty("_ttl")
private Long ttl;
 类似资料:
  • 我有一个设计糟糕的文档结构: 我想从上面的文档中检索标题、Fach和代码。 多谢了。

  • 升级到Spring boot 2.3和Spring data elasticsearch 4.0.9后的问题。我有这样的文档: 这在spring data 3.0中与Jackson配合得很好,但升级到4.0后,Jackson不再可用,现在我收到了一个来自spring的实例化异常,无法实例化URL对象。 例外情况: 任何关于解决方案的想法都将受到赞赏。

  • 我试图用Spring Boot和弹性搜索设置一个应用程序。这个应用程序已经使用Spring Data JPA存储库来持久化我的实体。当我试图在启用弹性搜索配置的情况下运行应用程序时,我遇到的问题是,当存储库被扫描时,我得到了一个异常。 我得到了以下例外: 我的存储库的定义如下: 异常似乎是由于count查询的签名导致的,该签名返回一个int。尽管这个存储库可以很好地处理JPA,但它会抛出一个异常,

  • 匹配查询用于实现以下情况的映射是什么 不区分大小写的搜索 数字搜索 特殊字符搜索 单字符搜索 > 我尝试使用通配符,但id不支持区分大小写 尝试使用小写规范化器匹配查询,它不支持特殊字符和单字符搜索 已尝试使用 ngram 匹配查询,但它不支持特殊字符和数字搜索。 任何人都可以帮助我的映射来支持上面提到的所有情况,无论是类型还是类型都很好

  • 是否缺少配置设置?

  • 我正在使用spring数据elasticsearch来执行CRUD操作。 我有一个扩展Elasticsearch chRepository的自定义存储库。 最终,ElasticsearchRepository扩展了CrudRepository,这意味着可以更新现有记录。 问题是,你是如何做到这一点的?我还没有找到一个名为“update()”的方法 我认为做以下事情会有用(代码从https://gi