问题:在开发一个日志系统项目时,遇到一个问题,生产环境的连接是ip+端口方式,测试环境的连接为url地址方式,在连接es时,不同的环境需要配置不同的连接方式。
解决方式:esconfig配置类中,根据地址中是否包含冒号判定是ip+端口还是url地址,如果是ip+端口,则采用 HttpHost httpHost = new HttpHost(host,port);构造连接对象,否则 采用
HttpHost httpHost = new HttpHost(address);的方式构造连接对象
引发的问题:
搜索数据时,采用ip+端口的方式会导致如下代码报错
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.sort("createdTime.keyword",SortOrder.DESC);
BoolQueryBuilder booleanQueryBuilder = QueryBuilders.boolQuery();
if (StringUtils.isNotBlank(po.getFunctionName())) {
booleanQueryBuilder.must(QueryBuilders.termQuery("functionName.keyword", po.getFunctionName() ));
}
报错如下:
解决方案:
builder.sort("createdTime.keyword",SortOrder.DESC);
改为
SortBuildersort = new FieldSortBuilder("createdTime").order(SortOrder.DESC).unmappedType("string");
builder.sort(sort);
booleanQueryBuilder.must(QueryBuilders.termQuery("functionName.keyword", po.getFunctionName() ));
}
改为
booleanQueryBuilder.must(QueryBuilders.termQuery("functionName", po.getFunctionName() ));
}
以上可根据加载环境变量的不同进行逻辑处理,保证代码兼容性
目前尚未想到更好的解决方案,如有哪位大佬能提供更好的解决方案,在此不胜感激