📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

版本: 7.6-7.14

简要来说,当Elasticsearch在从事务日志(translog)读取后无法重新应用过滤器时,会出现此错误。这可能是由于事务日志损坏或过滤器本身存在问题。要解决此问题,您可以尝试使用Elasticsearch提供的事务日志截断工具来清除事务日志。或者,您可以检查过滤器是否存在任何不一致或错误并进行修正。如果问题仍然存在,请考虑对数据进行重新索引。

日志上下文 #

日志"Failed to reapply filters for [" + id + “] after reading from translog"的类名是 ShardGetService.java。我们从Elasticsearch源代码中提取了以下内容,供那些寻求深入上下文的人参考:

// 通过从映射重新应用源过滤器来确保源一致(可能也会将源设置为null)
if (forceSourceForComputingTranslogStoredFields == false) {
    try {
        source = indexShard.mapperService().documentMapper().sourceMapper().applyFilters(source; null);
    } catch (IOException e) {
        throw new ElasticsearchException("Failed to reapply filters for [" + id + "] after reading from translog"; e);
    }
} else {
    // 慢速路径:从原始源重新创建存储字段
    assert source != null : "translog中的原始源必须存在";
    SourceToParse sourceToParse = new SourceToParse(shardId.getIndexName(); type; id; source;