es的mapping参数-fields
es的mapping参数-fields
概要
在es中,一个字段可能运用于不同的场景,但是某个字段类型的使用场景是有局限的
下面,我们先来看一段es查询语句:
1 $must = [ 2 "bool" => [ 3 "should" => [ 4 [ 5 "range" => [ 6 "user_id.raw" => [ 7 "gt" => 0 8 ] 9 ] 10 ], 11 [ 12 "bool" => [ 13 "filter" => [ 14 [ 15 "term" => [ 16 'user_id' => 0 17 ] 18 ], 19 ... 20 ] 21 ] 22 ], 23 ], 24 "minimum_should_match" => 1 25 ] 26 ];
由上面的es查询语句可以看到,user_id用于不同的过滤规则,我们看下es索引中关于此字段的定义:
Fields的作用
在es中,一个字段可能运用于不同的场景,但是某个字段类型的使用场景是有局限的。这就是mapping参数-fields的设计用途所在。
fields:多字段特性 让一个字段拥有多个子字段类型,使得一个字段能够被多个不同的索引方式进行索引。
例一:
1 PUT index_name 2 { 3 "mappings": { # 设置 mappings 4 "properties": { # 属性,固定写法 5 "city": { # 字段名 6 "type": "text", # city 字段的类型为 text 7 "fields": { # 多字段域,固定写法 8 "raw": { # 子字段名称 9 "type": "keyword" # 子字段类型 10 } 11 } 12 } 13 } 14 } 15 }
说明:fields可以让同一文本有多种不同的索引方式,比如上面所示一个String类型的字段city,可以使用text类型做全文检索,使用keyword类型做聚合和排序。
例二:
1 PUT index_name 2 { 3 "mappings": { 4 "properties": { 5 "title": { # 字段名称 6 "type": "text", # 字段类型 7 "analyzer": "english", # 字段分词器 8 "fields": { # 多字段域,固定写法 9 "std": { # 子字段名称 10 "type": "text", # 子字段类型 11 "analyzer": "standard" # 子字段分词器 12 } 13 } 14 } 15 } 16 } 17 }
例三:
1 PUT index_name 2 { 3 "mappings": { # 设置 mappings 4 "properties": { # 属性,固定写法 5 "user_id": { # 字段名 6 "type": "keyword", # user_id 字段的类型为 keyword 7 "fields": { # 多字段域,固定写法 8 "raw": { # 子字段名称 9 "type": "integer" # 子字段类型 10 } 11 } 12 } 13 } 14 } 15 }
说明:fields可以让同一文本有多种不同的索引方式,比如上面所示一个String类型的字段user_id,可以使用keyword类型做聚合和排序,使用integer来做范围查询,又由于integer作为范围较小的数据类型, 字段的长度也相对较短,使用它可以提高索引和搜索的效率。
参考链接:https://www.cnblogs.com/codeshell/p/14445420.html