一、概念
ES中的mapping类似关系型数据库中的表结构。
mapping中包含一些属性,如字段名称、类型、字段使用的分词器、是否评分、是否创建索引等属性
二、查看mapping
GET /product/_mapping
三、ES数据类型
常见类型
1、数字类型:long、integer、short、byte、double、float等
2、Keywords:该类型只能通过精确值搜索,不能被分词。Id应该用keyword
3、Dates(时间类型):包括date和date nanos
4、alias:为现有字段定义别名
5、text:文本类型。默认会创建倒排索引,做文本检索。
对象关系类型
1、object:用于单个JSON对象
2、nested:用于JSON对象数组
结构化类型
1、geo-point:纬度/经度积分
2、geo-shape:用于多边形等复杂形状
3、point:笛卡尔坐标点
4、shape:笛卡尔任意几何图形
特殊类型
1、IP地址:ip用于IPv4和IPv6地址
2、completion:在浏览器搜索时提供建议
四、映射类型
1、自动映射
整数:long
浮点数:float
true||false:boolean
日期:date
数组:取决于数组的第一个有效值
对象:object
字符串:如果不是数字和日期类型,那会被映射为text和keyword两个类型
2、手动映射
1 手工创建mapping 2 #手工创建mapping 3 PUT /product2 4 { 5 "mappings":{ 6 "properties": { 7 "date":{ 8 "type":"text" 9 }, 10 "name":{ 11 "type":"text" 12 } 13 } 14 } 15 }
五、映射参数
1、index:是否对当前字段创建倒排索引,默认为true,如果不创建倒排索引,该字段不会通过索引被搜索到,但是仍会在source元数据中展示
2、analyzer:指定分析器(分词器等)
3、doc_value:正排索引,为了提高排序和聚合效率,默认true,如果确定不需要对字段进行排序或聚合,也不需要通过脚本访问字段值,则可以禁用doc值来节约磁盘
4、search_analyzer:设置单独的查询时分词器
六、keyword
1 #给city创建一个keyword 2 PUT fields_test 3 { 4 "mappings":{ 5 "properties": { 6 "city":{ 7 "type": "text", 8 "fields": { 9 "raw":{ 10 "type":"keyword" 11 } 12 } 13 } 14 } 15 } 16 } 17 PUT fields_test/_doc/1 18 { 19 "city":"New York" 20 } 21 PUT fields_test/_doc/1 22 { 23 "city":"York" 24 } 25 GET fields_test/_search 26 { 27 "query": { 28 "match": { 29 "city": "york" 30 } 31 }, 32 "sort": { 33 "city.raw":"asc" 34 }, 35 "aggs":{ 36 "city":{ 37 "terms":{ 38 "field": "city.raw" 39 } 40 } 41 } 42 }