如何解决使用 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 举报,一经查实,本站将立刻删除。