问题描述
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 (将#修改为@)