elasticsearch+JestResult返回[match_phrase] query does not support zero_terms_query

一只蜗牛_40335856 2019-06-04 02:45:26
{"error":{"root_cause":[{"type":"parsing_exception","reason":"[match_phrase] query does not support [zero_terms_query]","line":1,"col":122}],"type":"parsing_exception","reason":"[match_phrase] query does not support [zero_terms_query]","line":1,"col":122},"status":400}




private JestClient jestClient= EsFactory.getJestClient(props);
public void execute(){
String rangeDate=RangeStragy.getTimestamp( props.getInt(Consts.QUERYRANGETYPE,0)).apply(props);
JestResult result=null;
try {
//开始查询
result=jestClient.execute(getSearch(rangeDate));
//返回数据处理
dealResultData(result);
} catch (RuntimeException r){
logger.info(r.getMessage());
System.out.println(r.getMessage());
} catch (Exception e){
logger.info(e.getMessage());
System.out.println(e.getMessage());
}finally {
try {
if (jestClient != null) {
jestClient.close();
}
}catch (Exception e){
System.err.println(e.getMessage());
}


}

}

private RangeQueryBuilder getRangeQueryBuilder(String timestamps){
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(Feilds.RANGE);
rangeQueryBuilder.from(timestamps.split("-")[0]);
rangeQueryBuilder.to(timestamps.split("-")[1]);
return rangeQueryBuilder;
}

private BoolQueryBuilder getBoolQueryBuilder(String timestamps){
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
getQueryCondition().forEach((key,value)->{
boolQueryBuilder.must(QueryBuilders.matchPhraseQuery(key, value).zeroTermsQuery(MatchQuery.ZeroTermsQuery.ALL));
});
boolQueryBuilder.must(getRangeQueryBuilder(timestamps));
return boolQueryBuilder;
}

private SearchSourceBuilder getSearchSourceBuilder(String timestamps){
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(getBoolQueryBuilder(timestamps));
builder.size(SIZE);
//设置返回数据字段
builder.fetchSource(props.getString(Consts.FEILDINCLUDE,null).split(","),null);
//
// builder.fetchSource(props.getString(Consts.FEILDINCLUDE,null).split(","),
// props.getString(Consts.FEILDEXCLUDE,null).split(","));
return builder;
}

private Search getSearch(String timestamps){
Search search =null;
//轮播
if (QueryEnum.parseQueryType(props.getInt(Consts.QUERYTYPE,0))){
search = new Search.Builder(getSearchSourceBuilder(timestamps).toString())
.addIndex(props.getString(Consts.TOPICNAME,null))
.addType(Feilds.TYPE)
.setParameter(Parameters.SCROLL,"3m")
.build();
}else {
search = new Search.Builder(getSearchSourceBuilder(timestamps).toString())
.addIndex(props.getString(Consts.TOPICNAME,null))
.addType(Feilds.TYPE)
.build();
}

return search;
}

/**
* 对结果数据做处理并写入文件
* @param result
*/
private void dealResultData(JestResult result){
Set<String> setNumber = Sets.newHashSet();
if(result.isSucceeded()){
String sourceString = result.getSourceAsString();
//sourceString = sourceString.replaceAll(",","\n");
sourceString = sourceString.concat("\n");
setNumber.add(sourceString);
RandomAccessFile raf;
try {
raf = new RandomAccessFile(props.getString(Consts.FILENAME,null), "rw");
for (String num : setNumber) {
raf.write(num.getBytes(StandardCharsets.UTF_8));
}
raf.close();
} catch (Exception e) {
logger.info(e.getMessage());
}

}else {
System.err.println(result.getJsonObject().toString());
}
}

/**
* 获取查询条件,组成map
* @return
*/
private Map<String,String> getQueryCondition(){
String[] conditons=props.getString(Consts.QUERYCONDITION,null).split("&&");
return Arrays.asList(conditons).stream().collect(Collectors.toMap(item->item.split(":")[0],item->item.split(":")[1]));
}
...全文
1216 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧