【烦人的ElasticSearch】Es如何创建索引(Java版本)

import com.alibaba.fastjson.JSON;
import com.bobft.fairy.service.EsService;
import com.bobft.fairy.vo.EsInsertEntity;
import com.bobft.fairy.vo.FinanceEsVo;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.action.bulk.BulkItemResponse;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * Es 创建索引和字段
 *
 * @author hcf
 * @date 2021/12/17 17:28
 */
@Slf4j
@Service
public class EsServiceImpl implements EsService {

    @Resource
    // restHighLevelClient 的配置信息请查看
    // [【烦人的ElasticSearch】Es7 如何判断索引是否存在(Java版本)](https://blog.csdn.net/qq_27631797/article/details/122091486?spm=1001.2014.3001.5501)
    private RestHighLevelClient restHighLevelClient;
    
    @Override
    public void createEsIndex(String esIndexYear) throws Exception {
        CreateIndexRequest createIndexRequest = new CreateIndexRequest(esIndexYear);
        // 配置分片数量和副本数量
		createIndexRequest.settings(Settings.builder()
                .put("number_of_shards", 3)
                .put("number_of_replicas", 0));
			
        // 配置映射源
        // 映射源的配置采用的是 XContentBuilder 方式
        // 还有两种方式分别是 Json 方式和 Map 方式
        // XContentBuilder 规则是每个元素必须以 startObject() 开始,以 endObject() 结尾
        // 对应到 ES 的语句便是,每个{}前后在Java代码中都对应一个 startObject() 和 endObject()
        XContentBuilder builder = XContentFactory.jsonBuilder();
        builder.startObject();
        {
            builder.startObject("properties");
            {
                // 流水号
                builder.startObject("requestRefId");
                {
                    builder.field("type", "keyword");
                }
                builder.endObject();

                // 手机号
                builder.startObject("mobile");
                {
                    builder.field("type", "keyword");
                }
                builder.endObject();

                // 发送时间
                builder.startObject("sendTime");
                {
                    builder.field("format", "yyyy-MM-dd HH:mm:ss");
                    builder.field("type", "date");
                }
                builder.endObject();
            }
            builder.endObject();
        }
        builder.endObject();
        createIndexRequest.mapping(builder);
        restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);
    }
}

附录 ES 原始操作

curl -XPUT '127.0.0.1:9200/es_index_create_test/_mapping?pretty' -H 'Content-Type: application/json' -d'
{
    "properties":{
        "requestRefId":{
            "type":"keyword"
        },
        "mobile":{
            "type":"keyword"
        },
        "sendTime":{
            "format":"yyyy-MM-dd HH:mm:ss",
            "type":"date"
        }
    }
}'

附录其他两种方式

// JSON 格式
CreateIndexRequest createIndexRequest = new CreateIndexRequest(esIndexYear);
createIndexRequest.mapping("{\"properties\":{\"requestRefId\":{\"type\":\"keyword\"},\"mobile\":{\"type\":\"keyword\"},\"sendTime\":{\"format\":\"yyyy-MM-dd HH:mm:ss\",\"type\":\"date\"}}}");
        restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);

// Map格式其实就是Map序列化后成为Json这种格式就可以
Map<String, String> requestRefIdParam = new HashMap();
requestRefIdParam.put("type", "keyword");
// mobile 和 sendTime 同理
Map<String, Object> mobileParam = new HashMap();
......
Map<String, Object> sendTimeParam = new HashMap();
......

// properties
Map<String, Object> propertiesParam = new HashMap();
propertiesParam.put("requestRefId", requestRefIdParam);
propertiesParam.put("mobile ", mobileParam);
propertiesParam.put("sendTime", sendTimeParam);

// 汇总
Map<String, Object> propertiesMap = new HashMap();
propertiesMap.put("properties", propertiesParam);

CreateIndexRequest createIndexRequest = new CreateIndexRequest(esIndexYear);
createIndexRequest.mapping(propertiesMap);
        restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值