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

适用版本: 6.8-8.9

1. 错误异常的基本描述 #

unknown boolean property [fieldName] 表示 Elasticsearch 在解析 Graph API 配置时,遇到了无法识别的布尔类型属性。

从源码可见,这个异常在 Graph 探索请求的解析路径中抛出,当布尔属性名无法匹配 significancereturn_detailed_info 等已知字段时触发。

典型报错 #

ElasticsearchParseException: Unknown boolean property: [invalid_property]

2. 为什么会发生这个错误 #

  • 属性名拼写错误:如将 significance 拼写错误。
  • 版本不兼容:使用了较新版本特有的属性。
  • 多余的属性:配置中包含了不被支持的字段。
  • API 误用:混淆了不同 API 的配置参数。

3. 排查步骤 #

  1. 检查配置结构:确认 Graph 探索请求的结构符合规范。
  2. 核对属性名:确认布尔属性名拼写正确且在支持列表中。
  3. 查阅版本文档:确认属性在当前版本中受支持。
  4. 简化配置:使用最小配置逐步验证。

4. 修复建议 #

方案一:修正属性名 #

确保使用正确的属性名:

// 错误示例
{
  "vertices": {
    "my_field": {
      "invalid_property": true
    }
  }
}

// 正确示例
{
  "vertices": {
    "my_field": {
      "significance": true,
      "return_detailed_info": false
    }
  }
}

方案二:移除无效属性 #

删除配置中不被支持的布尔属性。

方案三:升级版本 #

如果需要使用新属性,升级 Elasticsearch 版本。

5. 小结 #

unknown boolean property 通常意味着配置中的布尔属性名有误。排查时应优先检查属性名拼写和版本兼容性。

相关错误 #

附:日志上下文 #

if (SIGNIFICANCE_FIELD.match(fieldName, parser.getDeprecationHandler())) {
    graphRequest.useSignificance(parser.booleanValue());
} else if (RETURN_DETAILED_INFO.match(fieldName, parser.getDeprecationHandler())) {
    graphRequest.returnDetailedInfo(parser.booleanValue());
} else {
    throw new ElasticsearchParseException("Unknown boolean property: [" + fieldName + "]");
}
} else if (token == XContentParser.Token.VALUE_STRING) {
    if (TIMEOUT_FIELD.match(fieldName, parser.getDeprecationHandler())) {
        graphRequest.timeout(TimeValue.parseTimeValue(parser.text(), null, "timeout"));
    } else {