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

 

posted @   欢乐豆123  阅读(7097)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2020-07-31 git commit的提交规范
2020-07-31 CGI、FastCGI、PHP-CGI与PHP-FPM的概念以及各个之间的关系
点击右上角即可分享
微信分享提示