居然是你

elasticsearch升级带来的问题java api使用的问题,请牛人指教

Elasticsearch | 作者 gaojun1212 | 发布于2018年06月15日 | 阅读数:4474

如题,近期升级在做开发环境的elasticsearch的升级,版本跨度比较大,从1.7.5升级到5.6.9,一种java api使用调整过程中遇到这样一个问题,原来的api,SearchRequestBuilder支持setSource()参数为json格式的字符串

1.7_.5_.jpg

 
升级后该方法参数只支持SearchSourceBuilder

5.6_.9_.jpg

 
 
想问一下,这种有什么好的处理办法么,尝试过把这个json转成SearchSourceBuilder对象,但是使用QueryParseContext生成的时候,程序会报错,具体方式以及报错如下:

test1.jpg

 
这个方式感觉是在构造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对象的方法,或者有其他的好的方式实现方式么
 
已邀请:

gaojun1212

赞同来自:

问题已经解决,通过源码,发现TransportClient,里面有一块生成NamedXContentRegistry的方法,如下:
通过SearchModule实现

解决2.jpg

 
后简单main方法测试好用,还没有在实际项目中尝试

解决.jpg

 

401825317 - 90后it男

赞同来自:

6.2.4没有了queryparsecontent对象,帮忙看下我遇到的问题。
https://elasticsearch.cn/question/8999

要回复问题请先登录注册