微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 XContentParser 解析“has_parent”查询时的 Elasticsearch 异常,未知字段 [has_parent]

如何解决使用 XContentParser 解析“has_parent”查询时的 Elasticsearch 异常,未知字段 [has_parent]

ES 7.7.0,得到以下异常,虽然"has_parent"查询有效并且在ES索引中有效,尝试使用ES解析器API解析时出现异常

输出

ssb = {"query":{"term":{"_tenant_id":{"value":"working","boost":1.0}}}}
Exception in thread "main" org.elasticsearch.common.xcontent.XContentParseException: [1:41] [bool] Failed to parse field [must]
    at org.elasticsearch.common.xcontent.ObjectParser.parseValue(ObjectParser.java:510)
    at org.elasticsearch.common.xcontent.ObjectParser.parseArray(ObjectParser.java:502)
    at org.elasticsearch.common.xcontent.ObjectParser.parseSub(ObjectParser.java:534)
    at org.elasticsearch.common.xcontent.ObjectParser.parse(ObjectParser.java:319)
    at org.elasticsearch.common.xcontent.ObjectParser.parse(ObjectParser.java:251)
    at org.elasticsearch.index.query.BoolQueryBuilder.fromXContent(BoolQueryBuilder.java:297)
    at org.elasticsearch.search.SearchModule.lambda$registerQuery$14(SearchModule.java:871)
    at org.elasticsearch.common.xcontent.NamedxcontentRegistry.parseNamedobject(NamedxcontentRegistry.java:140)
    at org.elasticsearch.common.xcontent.support.AbstractXContentParser.namedobject(AbstractXContentParser.java:385)
    at org.elasticsearch.index.query.AbstractQueryBuilder.parseInnerQueryBuilder(AbstractQueryBuilder.java:317)
    at org.elasticsearch.search.builder.SearchSourceBuilder.parseXContent(SearchSourceBuilder.java:1098)
    at org.elasticsearch.search.builder.SearchSourceBuilder.parseXContent(SearchSourceBuilder.java:1036)
    at QMain.main(QMain.java:34)
Caused by: ParsingException[unkNown query [has_parent]]; nested: NamedobjectNotFoundException[[1:41] unkNown field [has_parent]];
    at org.elasticsearch.index.query.AbstractQueryBuilder.parseInnerQueryBuilder(AbstractQueryBuilder.java:321)
    at org.elasticsearch.index.query.BoolQueryBuilder.lambda$static$1(BoolQueryBuilder.java:281)
    at org.elasticsearch.common.xcontent.AbstractObjectParser.lambda$declareObjectArray$10(AbstractObjectParser.java:237)
    at org.elasticsearch.common.xcontent.AbstractObjectParser.lambda$declareFieldArray$16(AbstractObjectParser.java:265)
    at org.elasticsearch.common.xcontent.AbstractObjectParser.parseArray(AbstractObjectParser.java:357)
    at org.elasticsearch.common.xcontent.AbstractObjectParser.lambda$declareFieldArray$17(AbstractObjectParser.java:265)
    at org.elasticsearch.common.xcontent.ObjectParser.lambda$declareField$9(ObjectParser.java:381)
    at org.elasticsearch.common.xcontent.ObjectParser.parseValue(ObjectParser.java:508)
    ... 12 more
Caused by: org.elasticsearch.common.xcontent.NamedobjectNotFoundException: [1:41] unkNown field [has_parent]
    at org.elasticsearch.common.xcontent.NamedxcontentRegistry.parseNamedobject(NamedxcontentRegistry.java:132)
    at org.elasticsearch.common.xcontent.support.AbstractXContentParser.namedobject(AbstractXContentParser.java:385)
    at org.elasticsearch.index.query.AbstractQueryBuilder.parseInnerQueryBuilder(AbstractQueryBuilder.java:317)
    ... 19 more

重现问题的Java代码

        SearchSourceBuilder ssb = new SearchSourceBuilder();
        String query = null;
        String working = "{\"query\":{\"term\":{\"_tenant_id\":\"working\"}}}";
        String notWorking = "{\"query\":{\"bool\":{\"must\":[{\"has_parent\":{\"query\":{\"match_all\":{}},\"parent_type\":\"event_parent\"}}]}}}";

//query = working;
// Not working
        query = notWorking;
        SearchModule searchModule1 = new SearchModule(Settings.EMPTY,false,Collections.emptyList());
        XContentParser parser1 = XContentFactory.xContent(XContentType.JSON).createParser(
                new NamedxcontentRegistry(searchModule1.getNamedxcontents()),DeprecationHandler.THROW_UNSUPPORTED_OPERATION,query);
        ssb.parseXContent(parser1);
        System.out.println("ssb = " + ssb.toString());

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。