如题,近期升级在做开发环境的elasticsearch的升级,版本跨度比较大,从1.7.5升级到5.6.9,一种java api使用调整过程中遇到这样一个问题,原来的api,SearchRequestBuilder支持setSource()参数为json格式的字符串
升级后该方法参数只支持SearchSourceBuilder
想问一下,这种有什么好的处理办法么,尝试过把这个json转成SearchSourceBuilder对象,但是使用QueryParseContext生成的时候,程序会报错,具体方式以及报错如下:
这个方式感觉是在构造XContentParser的时候,NamedXContentRegistry用的不对,我用的是空的,导致后面解析的时候取不到值报错
另外还尝试用SearcherSourceBuilder的StreamInput带参构造方法,用的InputStreamStreamInput
import org.elasticsearch.common.io.stream.InputStreamStreamInput
InputStream is = new ByteArrayInputStream(str.getBytes());
InputStreamStreamInput si = new InputStreamStreamInput(is);
SearchSourceBuilder ssb = new SearchSourceBuilder(si );
这种方式试了依旧不好使,报错
请教各位,有什么好的方法能实现把SearcherSourceBuilder的json字符串转成SearcherSourceBuilder对象的方法,或者有其他的好的方式实现方式么
升级后该方法参数只支持SearchSourceBuilder
想问一下,这种有什么好的处理办法么,尝试过把这个json转成SearchSourceBuilder对象,但是使用QueryParseContext生成的时候,程序会报错,具体方式以及报错如下:
这个方式感觉是在构造XContentParser的时候,NamedXContentRegistry用的不对,我用的是空的,导致后面解析的时候取不到值报错
另外还尝试用SearcherSourceBuilder的StreamInput带参构造方法,用的InputStreamStreamInput
import org.elasticsearch.common.io.stream.InputStreamStreamInput
InputStream is = new ByteArrayInputStream(str.getBytes());
InputStreamStreamInput si = new InputStreamStreamInput(is);
SearchSourceBuilder ssb = new SearchSourceBuilder(si );
这种方式试了依旧不好使,报错
请教各位,有什么好的方法能实现把SearcherSourceBuilder的json字符串转成SearcherSourceBuilder对象的方法,或者有其他的好的方式实现方式么
2 个回复
gaojun1212
赞同来自:
通过SearchModule实现
后简单main方法测试好用,还没有在实际项目中尝试
401825317 - 90后it男
赞同来自:
https://elasticsearch.cn/question/8999