Elasticsearch教程(五) elasticsearch Mapping的创建
一、Mapping介绍
在Elasticsearch中,Mapping是什么?
mapping在Elasticsearch中的作用就是约束。
1.数据类型声明
它类似于静态语言中的数据类型声明,比如声明一个字段为String
, 以后这个变量都只能存储String
类型的数据。同样的, 一个number
类型的mapping字段只能存储number
类型的数据。
2.Mapping它定义了 Type 的属性。
"_ttl": {"enabled": false}
表示 ttl
关闭,其实ttl
默认就是关闭。
3.指定分词器。
"id": {
"index": "not_analyzed",
"type": "string"
}
指定字段 id
不分词,并且类型为 string
。
二、创建Mapping
1.下面介绍一下HTTP的创建方式。我一般用Java 创建方式。
PUT http://123.123.123.123:9200/index/type/
{
"settings": {
//设置10个分片,理解为类似数据库中的表分区中一个个分区的概念,不知道是否妥当
"number_of_shards": 10
},
"mappings": {
"trades": {
"_id": {
"path": "id"
},
"properties": {
"id": {
"type": "integer",
//id:自增数字
//要求:查询
"store" : true
},
"name": { //名称
"type": "string"
},
"brand": { //品牌: PG,P&G,宝洁集团,宝洁股份,联想集团,联想电脑等
"type": "string"
},
"orderNo": { //订单号 :如ATTS000928732
"type": "string",
"index": "not_analyzed"
},
"description": {
//描述: 2015款玫瑰香型强生婴儿沐浴露,550ml,包邮
"type": "string",
"sort": true
},
"date": {
"type": "date"
},
"city": {
"type": "string"
},
"qty": {// index分词无效
"type": "float"
},
"price": {
//价格: float index无效
"type": "float"
}
}
}
}
}
2.Java方式创建。
构建Mapping
package com.sojson.core.elasticsearch.mapping;
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
import java.io.IOException;
import org.elasticsearch.common.xcontent.XContentBuilder;
public class ZhidaoMapping {
public static XContentBuilder getMapping(){
XContentBuilder mapping = null;
try {
mapping = jsonBuilder()
.startObject()
//开启倒计时功能
.startObject("_ttl")
.field("enabled",false)
.endObject()
.startObject("properties")
.startObject("title")
.field("type","string")
.endObject()
.startObject("question")
.field("type","string")
.field("index","not_analyzed")
.endObject()
.startObject("answer")
.field("type","string")
.field("index","not_analyzed")
.endObject()
.startObject("category")
.field("type","string")
.field("index","not_analyzed")
.endObject()
.startObject("author")
.field("type","string")
.field("index","not_analyzed")
.endObject()
.startObject("date")
.field("type","string")
.field("index","not_analyzed")
.endObject()
.startObject("answer_author")
.field("type","string")
.field("index","not_analyzed")
.endObject()
.startObject("answer_date")
.field("type","string")
.field("index","not_analyzed")
.endObject()
.startObject("description")
.field("type","string")
.field("index","not_analyzed")
.endObject()
.startObject("keywords")
.field("type","string")
.field("index","not_analyzed")
.endObject()
.startObject("read_count")
.field("type","integer")
.field("index","not_analyzed")
.endObject()
//关联数据
.startObject("list").field("type","object").endObject()
.endObject()
.endObject();
} catch (IOException e) {
e.printStackTrace();
}
return mapping;
}
}
创建Mapping
public static void createBangMapping(){
PutMappingRequest mapping = Requests.putMappingRequest(INDEX).type(TYPE).source(ZhidaoMapping.getMapping());
ESTools.client.admin().indices().putMapping(mapping).actionGet();
}
创建的时候,需要 index
已经创建才行,要不然会报错。
//构建一个Index(索引)CreateIndexRequest request = new CreateIndexRequest(INDEX);
ESTools.client.admin().indices().create(request);
创建完毕在Head插件里查看或者Get
请求。
http://123.123.123.123:9200/index/type/_mapping
得到的结果:
{
"zhidao_index": {
"mappings": {
"zhidao_type": {
"_ttl": {
"enabled": false
},
"properties": {
"answer": {
"type": "string",
"index": "not_analyzed"
},
"answerAuthor": {
"type": "string"
},
"answerDate": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"//这里出现了复合类型
},
"answer_author": {
"type": "string",
"index": "not_analyzed"
},
"answer_date": {
"type": "string",
"index": "not_analyzed"
},
"author": {
"type": "string",
"index": "not_analyzed"
},
"category": {
"type": "string",
"index": "not_analyzed"
},
"date": {
"type": "string",
"index": "not_analyzed"
},
"description": {
"type": "string",
"index": "not_analyzed"
},
"id": {
"type": "string",
"index": "not_analyzed"
},
"keywords": {
"type": "string",
"index": "not_analyzed"
},
"list": {
"type": "object"
},
"question": {
"type": "string",
"index": "not_analyzed"
},
"readCount": {
"type": "long"
},
"read_count": {
"type": "integer"
},
"title": {
"type": "string"
}
}
}
}
}
}
Head插件查看
其实Mapping,你接触Elasticsearch久一点也就那么回事。我们虽然知道Elasticsearch有根据数据识别创建Mapping,但是最好是创建,并且指定分词与否。这样高效一点。
Elasticsearch教程(五) elasticsearch Mapping的创建的更多相关文章
- (转)ElasticSearch教程——汇总篇
https://blog.csdn.net/gwd1154978352/article/details/82781731 环境搭建篇 ElasticSearch教程——安装 ElasticSearch ...
- ElasticSearch(五):Mapping和常见字段类型
ElasticSearch(五):Mapping和常见字段类型 学习课程链接<Elasticsearch核心技术与实战> 什么是Mapping Mapping类似数据库中的schema的定 ...
- Elasticsearch入门教程(五):Elasticsearch查询(一)
原文:Elasticsearch入门教程(五):Elasticsearch查询(一) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:h ...
- Elasticsearch教程(六) elasticsearch Client创建
Elasticsearch 创建Client有几种方式. 首先在 Elasticsearch 的配置文件 elasticsearch.yml中.定义cluster.name.如下: cluster ...
- ElasticSearch实战系列五: ElasticSearch的聚合查询基础使用教程之度量(Metric)聚合
Title:ElasticSearch实战系列四: ElasticSearch的聚合查询基础使用教程之度量(Metric)聚合 前言 在上上一篇中介绍了ElasticSearch实战系列三: Elas ...
- Elasticsearch 教程--入门
1.1 初识 Elasticsearch 是一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎,可以说 Lucene 是当今最先进,最高效的全功能开源搜索引擎框架. 但是 L ...
- Elasticsearch系列(五)----JAVA客户端之TransportClient操作详解
Elasticsearch JAVA操作有三种客户端: 1.TransportClient 2.JestClient 3.RestClient 还有种是2.3中有的NodeClient,在5.5.1中 ...
- elasticsearch index 之 put mapping
elasticsearch index 之 put mapping mapping机制使得elasticsearch索引数据变的更加灵活,近乎于no schema.mapping可以在建立索引时设 ...
- Elasticsearch教程(二)java集成Elasticsearch
1.添加maven <!--tika抽取文件内容 --> <dependency> <groupId>org.apache.tika</groupId> ...
随机推荐
- fastjson对json字符串JSONObject和JSONArray互相转换操作示例
2017-03-25 直接上代码: package com.tapt.instance; import com.alibaba.fastjson.JSON; import com.alibaba.fa ...
- Java并发(2)- 聊聊happens-before
引言 上一篇文章聊到了Java内存模型,在其中我们说JMM是建立在happens-before(先行发生)原则之上的. 为什么这么说呢?因为在Java程序的执行过程中,编译器和处理器对我们所写的代码进 ...
- C语言.c和.h
简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成 ...
- 搭建github服务器
https://about.gitlab.com/downloads/#centos6
- 关闭vs警告
禁用所有编译器警告 当“解决方案资源管理器”中有项目选中时,在“项目”菜单上单击“属性”. 单击“编译”选项卡. 选中“禁用所有警告”复选框. 禁用单个编译器警告 在“解决方案资源管理器”中选定一个项 ...
- 菜单栏选中时CSS3过渡效果
(如有错敬请指点,以下是我工作中遇到并且解决的问题) 效果图: 未点击时: 点击后: HTML代码: <ul> <li class="active">菜单1 ...
- mogilefsdBUG mogilefsd[15624]: crash log: Modification of a read-only value attempted at /usr/local/share/perl5/Sys/Syscall.pm line 227
mogilefsd[15624]: crash log: Modification of a read-only value attempted at /usr/local/share/perl5/S ...
- 使用函数方式生成UUID
1.默认生成的UUID是有 “-” 分隔符的 例如: public static void main(String[] args){ String uuid = UUID.randomUUID().t ...
- 【原创】Win7 IE故障:APPCRASH,d3d9.dll,c0000005
问题 今天使用使用IE登录某网址,发现总是报错,如下图,无法浏览. 解决方案 主要讲IE的呈现方案修改即可,如下步骤: 在IE的[Internet选项]选择[高级]选项卡,在[加速的图形]中勾选[使用 ...
- TP5使用技巧
1.fetchSql用于直接返回SQL而不是执行查询,适用于任何的CURD操作方法. 例如:$result = Db::table('think_user')->fetchSql(true)-& ...