实验原理
elasticsearch mapping 简介
Mapping 对应数据库里的表定义,我们都知道数据库表有各种字段每种字段使用场景是不一样,mapping 中字段也类似数据库字段,定义形式不同搜索场景也不同 ,mapping 还有一些其他的含义,mapping 不仅告诉 ES 一个 field 中是什么类型的值,它还告诉 ES 如何索引数据以及数据是否能被搜索到,Mapping 是对于 index 上每种 type 的定义。
mapping 的字段几种定义解释
mapping 字段定义的使用,我们下面针对常用的进行说明
index: "analyzed" //分词,不分词是:not_analyzed ,设置成 no,字段将不会被索引
analyzer: "ik" //指定分词器
search_analyzer: "ik" //设置搜索时的分词器,默认跟 ananlyzer 是一致的
下面我们同 java 的方式创建 mapping 并且通过 head 插件查看
实验步骤
创建 mapping
在syl_es项目的com.syl.es下新建 CreateMapping 类
编写 mapping 方法,具体代码如下:
package com.syl.es;
import java.net.InetAddress;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.Requests;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
public class CreateMapping {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) {
//调用创建索引方法
createMapping("user","userInfo");
}
/**
* 创建索引mapping
* @param indices 索引名称
* @param mappingType 索引type名称
*/
public static void createMapping(String indices,String mappingType){
//索引服务的地址
String elasticServer= "127.0.0.1";
//索引服务的端口
Integer elasticServerPort = 9300;
Client client=null;
try{
//初始化连接
Settings settings = Settings.settingsBuilder()
.build();
client = TransportClient.builder().settings(settings).build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(elasticServer), elasticServerPort));
new XContentFactory();
XContentBuilder builder=XContentFactory.jsonBuilder()
.startObject()
.startObject(mappingType)
.startObject("properties")
.startObject("name").field("type", "string").field("analyzer","ik").field("searchAnalyzer", "ik").endObject()//设置name为ik分词
.startObject("nickname").field("type", "string").field("index", "not_analyzed").endObject()//设置nicknamenot_analyzed不分词
.startObject("nativeplace").field("type", "string").field("index", "no").endObject()//设置nativeplace不索引
.startObject("address").field("type", "string").field("index", "no").endObject()//设置nativeplace不索引
.startObject("birthdate").field("type", "date").field("format", "yyyy-MM-dd").field("index", "not_analyzed").endObject()//设置birthdate为日期型格式
.endObject()
.endObject()
.endObject();
System.out.println(builder.toString());
PutMappingRequest mapping = Requests.putMappingRequest(indices).type(mappingType).source(builder);
//创建索引的mapping
client.admin().indices().putMapping(mapping).actionGet();
//关闭连接
client.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
以 Java Application 的方式,运行CreateMapping.java文件 (在运行 CreateMapping.java 之前,需要创建好索引)。
访问地址栏查看 mapping 创建情况
通过浏览器访问http://127.0.0.1:9200/user/userInfo/_mapping
查看 mapping 创建情况
打开浏览器访问 head 地址 http://127.0.0.1:9200/_plugin/head打开信息->索引信息
image.png
通过查看 head 发现 mapping 已经创建成功。
网友评论