es 查询报seq_no_primary_term字段不存在

现象

今天通过elasticsearch-rest-high-level-client 工具查询es 统计的时候,报了以下的错误

{
    "error": {
        "root_cause": [
            {
                "type": "parsing_exception",
                "reason": "Unknown key for a VALUE_BOOLEAN in [seq_no_primary_term].",
                "line": 67,
                "col": 56
            }
        ],
        "type": "parsing_exception",
        "reason": "Unknown key for a VALUE_BOOLEAN in [seq_no_primary_term].",
        "line": 67,
        "col": 56
    },
    "status": 400
}

翻译过来就是,seq_no_primary_term 这个字段不支持。手动通过http调用查询,去掉seq_no_primary_term字段后,发现可以正常查询,可以确认是当前的es版本不支持这个字段的解析导致。

查询参数如下:

"aggregations": {
    "topHit": {
        "top_hits": {
            "from": 0,
            "size": 1,
            "version": false,
            "seq_no_primary_term": true,
            "explain": false,
            "_source": {
                "includes": ["twoLevelCode"],
                "excludes": []
            }
        }
    }
}

解决

经过排查,

  1. 当前的es版本是 6.2.2。
  2. elasticsearch-rest-high-level-client 的版本为6.7.2
  3. 通过查询官方文档,发现seq_no_primary_term 是在es6.7版本添加的,所以会产生上述问题。客户端拼装的es查询条件多个seq_no_primary_term字段,但是服务器不支持解析。官方文档
  4. 因为服务版本无法升级,所以将客户端工具降级到6.7版本以下即可,比如v6.6.2

总结

此次问题的更本原因还是客户端查询工具与服务端的版本不一致,导致低版本的服务器不支持高版本的查询语法导致。解决办法也很简单,将两端的版本改为一致即可。

你可能感兴趣的:(elasticsearch,日常问题,java,java,elasticsearch,数据库)