ElastichSearch 连接采用ip和url方式连接配置以及引发的问题解决方案

在开发日志系统项目时,遇到生产环境使用IP+端口,测试环境使用URL连接Elasticsearch的问题。通过在esconfig配置类中判断地址格式来构建连接对象。但在搜索时,IP+端口的方式导致SortOrder排序错误。解决方案是修改SortBuilder和查询条件,以适应未映射的类型,并根据环境变量调整代码逻辑以确保兼容性。目前寻求更优解。
摘要由CSDN通过智能技术生成

问题:在开发一个日志系统项目时,遇到一个问题,生产环境的连接是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() ));

}

以上可根据加载环境变量的不同进行逻辑处理,保证代码兼容性

目前尚未想到更好的解决方案,如有哪位大佬能提供更好的解决方案,在此不胜感激

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值