Elasticsearch 6.5.4 ParsingException[no [query] registered for [has_child]]
Elasticsearch | 作者 llnjava | 发布于2020年03月29日 | 阅读数:2882
由于业务需要使用haschild做关联查询,接口接收查询json串后转换为SearchSourceBuilder,但是提示ParsingException[no [query] registered for [has_child]]
查询json如下:
转换代码如下:
查询json如下:
{
"from" : 0,
"size" : 30,
"query" : {
"bool" : {
"should" : [ {
"multi_match" : {
"query" : "iphone",
"fields" : [ "shopName^4.0", "gysName^3.0" ]
}
}, {
"has_child" : {
"query" : {
"multi_match" : {
"query" : "iphone",
"fields" : [ "skuName^2.0", "brandNameChEn^1.0", "cName" ]
}
},
"type" : "sku"
}
} ]
}
},
"highlight" : {
"pre_tags" : [ "<em>" ],
"post_tags" : [ "</em>" ],
"fields" : {
"shopName" : { }
}
}
}
转换代码如下:
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
try {
SearchModule searchModule = new SearchModule(Settings.EMPTY, false, Collections.emptyList());
NamedXContentRegistry registry = new NamedXContentRegistry(searchModule.getNamedXContents());
XContentParser parser = XContentFactory.xContent(XContentType.JSON).createParser(registry,LoggingDeprecationHandler.INSTANCE,source);
searchSourceBuilder.parseXContent(parser);
} catch (Exception e) {
e.printStackTrace();
throw SearchException.ES_REMOVE_FAIL.newInstance("解析查询条件异常,source:%s,error:%s",source,e);
}
return searchSourceBuilder;
找了一些资料,并查看了源码,发现SearchModule类中并未注册haschildquery类,不知道这种情况如何处理?请帮忙想想办法,多谢!
1 个回复
llnjava
赞同来自: