ElasticSearch:创建映射(6)

Mapping就是定义Document中的每个Field的特征(数据类型,是否存储,是否索引,是否分词等)

  • 类型名称: 就是前面讲的type的概念,类似于数据库中的表。

  • 字段名: 任意填写,可以指定许多属性,例如

    • type:类型,可以是text、long、short、date、integer、object等

    • index:是否索引,默认为true

    • store:是否存储,默认为true

    • analyzer:分词器,这里的ik_max_word即使用ik分词器

注意事项: 1)建立映射前,必须先建立索引库

2)索引库中已经有文档了,就不能再修改映射了

编程步骤

  • 创建Settings配置信息对象

  • 创建ES传输客户端对象

  • 创建索引库管理客户端,创建空的索引库

  • 创建映射信息json格式字符串,使用XContentBuilder

  • 创建映射请求对象,封装请求信息

  • 索引库管理客户端,为索引库添加映射

  • 释放资源

代码实现

package cn.dt2008.elasticsearch;

import cn.dt2008.domain.Article;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.client.IndicesAdminClient;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Test;

import java.net.InetAddress;

/**
 * 演示ES的映射创建
 */
public class Demo4 {

    @Test
    public void testMappings() throws Exception {
        //1. 创建Settings配置信息对象
        Settings settings = Settings.builder()
                .put("cluster.name","elasticsearch").build();

        //2. 创建ES传输客户端对象
        TransportClient transportClient = new PreBuiltTransportClient(settings);
        //2.1 设置ES连接参数
        transportClient.addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"),9300));

        //3. 创建索引库管理客户端,创建空的索引库
        IndicesAdminClient indices = transportClient.admin().indices();
        indices.prepareCreate("blog3").get();

        //4. 创建映射信息json格式字符串,使用XContentBuilder(**)
        //4.1 创建XContentBuild
        XContentBuilder builder = XContentFactory.jsonBuilder();
        builder.startObject(); // {
        builder.startObject("article"); // "article":{
        builder.startObject("properties"); // "properties":{

        //id
        builder.startObject("id"); // "id":{
        //类型
        builder.field("type","long"); // "type":"long"
        //是否索引
        builder.field("index",true); // "index":true
        //是否存储
        builder.field("store",true); // "store":true
        builder.endObject(); // }

        //title
        builder.startObject("title"); // "id":{
        //类型
        builder.field("type","text"); // "type":"long"
        //是否索引
        builder.field("index",true); // "index":true
        //是否存储
        builder.field("store",true); // "store":true
        //使用什么分词器
        builder.field("analyzer","ik_smart");
        builder.endObject(); // }

        //content
        builder.startObject("content"); // "id":{
        //类型
        builder.field("type","text"); // "type":"long"
        //是否索引
        builder.field("index",true); // "index":true
        //是否存储
        builder.field("store",true); // "store":true
        //使用什么分词器
        builder.field("analyzer","ik_smart");
        builder.endObject(); // }

        builder.endObject(); // }
        builder.endObject(); // }
        builder.endObject(); // }

        //5. 创建映射请求对象,封装请求信息(**)
        //PutMappingRequest: 用于封装索引的映射信息的对象
        PutMappingRequest putMappingRequest = new PutMappingRequest("blog3").type("article").source(builder);

        //6. 索引库管理客户端,为索引库添加映射: putMapping
        indices.putMapping(putMappingRequest).get();

        //7. 释放资源
        transportClient.close();

    }

}


小结

映射的作用是什么?

  • 映射的作用就是定义Docement文档中每个Field的特征(是否分词,是否索引,是否存储,数据类型)

映射能不能索引库中有文档的时候再去修改?

  • 不能!

创建映射的时候,如果没有索引库会报错么?

  • 创建映射的时候,必须有索引库,否则报错!
本站资源除特别声明外,转载文章请声明文章出处
东泰博客 » ElasticSearch:创建映射(6)

发表评论