Java使用ElasticSearch API设置Mapping

最近一个项目要接PLC下位机的数据存放到ElasticSearch,数据都是double的数值类型,因此在接的时候需要进行Mapping:

"rEva_Photo_x2": {
    "type": "double"
 },
 "AlarmbAlignConvInverter": {
    "type": "double"
 },
 "AlarmbAlignConvLoseErr": {
    "type": "double"
 },
 "AlarmbAlignFor": {
    "type": "double"
 },
 "AlarmbInConvLoseErr": {
    "type": "double"
 },
 "AlarmbLowerlimit": {
    "type": "double"
 },................
设置Mapping和接入的代码如下:

	@Override
	public void saveAideEs(SaveAideEs saveAideEs) {
		
		IndicesExistsResponse  indicesResponse = 
                getClient().admin().indices().exists( 
                        new IndicesExistsRequest().indices(new String[]{saveAideEs.getIndex()})).actionGet();
		//如果Index不存在就创建Mapping会报错
		if(!indicesResponse.isExists()) {
			getClient().admin().indices().prepareCreate(saveAideEs.getIndex()).execute().actionGet();	
			PutMappingRequest mapping = Requests.putMappingRequest(saveAideEs.getIndex()).type(saveAideEs.getType()).
					source(getMapping(saveAideEs.getSource().keySet()));
			getClient().admin().indices().putMapping(mapping).actionGet();
		}
		//写入数据到ElasticSearch
		IndexRequestBuilder builder = getClient().prepareIndex(saveAideEs.getIndex(), saveAideEs.getType());
		builder.setSource(saveAideEs.getSource());
		builder.get();
	}
	//构造Mapping,keySet包含所有的字段
	private XContentBuilder getMapping(Set<String> keySet) {
		XContentBuilder mapping = null;
		try {
			mapping = jsonBuilder()
					.startObject().startObject("properties");
			Iterator<String> it = keySet.iterator();  
			while (it.hasNext()) {  
				  String str = it.next();
				  if(str.equals("@timestamp"))	//跳过@timestamp字段
					  continue;
				  mapping.startObject(str).field("type", "double").field("index","not_analyzed").endObject();
			} 
			mapping.endObject().endObject();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return mapping;
	}
之后就可以对这些字段进行数值运算了,下面是个使用ElasticSearch-sql的例子:



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值