栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

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

【烦人的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;


@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 requestRefIdParam = new HashMap();
requestRefIdParam.put("type", "keyword");
// mobile 和 sendTime 同理
Map mobileParam = new HashMap();
......
Map sendTimeParam = new HashMap();
......

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

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

CreateIndexRequest createIndexRequest = new CreateIndexRequest(esIndexYear);
createIndexRequest.mapping(propertiesMap);
        restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/682987.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号