Mapping2.0

一、概念

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 }

 

posted @ 2021-09-04 20:21  showMeTheCodes  阅读(48)  评论(0编辑  收藏  举报