ElasticSearch 的 mapping 参数 - fields

概要

在 es 中,一个字段可能运用于不同的场景,但是某个字段类型的使用场景是有局限的

下面,我们先来看一段 es 查询语句:

复制代码
$must = [
            "bool" => [
                "should" => [
                    [
                        "range" => [
                            "user_id.raw" => [
                                "gt" => 0
                            ]
                        ]
                    ],
                    [
                        "bool" => [
                            "filter" => [
                                [
                                    "term" => [
                                        'user_id' => 0
                                    ]
                                ],
                                ...
                            ]
                        ]
                    ],
                ],
                "minimum_should_match" => 1
            ]
        ];

由上面的 es 查询语句可以看到,user_id 用于不同的过滤规则,我们看下 es 索引中关于此字段的定义:

Fields 的作用

在 es 中,一个字段可能运用于不同的场景,但是某个字段类型的使用场景是有局限的。这就是 mapping 参数 - fields 的设计用途所在。

fields:多字段特性 让一个字段拥有多个子字段类型,使得一个字段能够被多个不同的索引方式进行索引。

例一:

复制代码
PUT index_name
{
  "mappings": {         # 设置 mappings
    "properties": {     # 属性,固定写法
      "city": {         # 字段名
        "type": "text", # city 字段的类型为 text
        "fields": {     # 多字段域,固定写法
          "raw": {      # 子字段名称
            "type":  "keyword"  # 子字段类型
          }
        }
      }
    }
  }
}

说明:fields 可以让同一文本有多种不同的索引方式,比如上面所示一个 String 类型的字段 city,可以使用 text 类型做全文检索,使用 keyword 类型做聚合和排序。

例二:

复制代码
PUT index_name
{
  "mappings": {
    "properties": {
      "title": {               # 字段名称
        "type": "text",        # 字段类型
        "analyzer": "english", # 字段分词器
        "fields": {            # 多字段域,固定写法
          "std": {             # 子字段名称
            "type": "text",    # 子字段类型
            "analyzer": "standard"  # 子字段分词器
           }
        }
      }
    }
  }
}

例三:

PUT index_name
{
  "mappings": {         # 设置 mappings
    "properties": {     # 属性,固定写法
      "user_id": {         # 字段名
        "type": "keyword", # user_id 字段的类型为 keyword
        "fields": {     # 多字段域,固定写法
          "raw": {      # 子字段名称
            "type":  "integer"  # 子字段类型
          }
        }
      }
    }
  }
}

说明:fields 可以让同一文本有多种不同的索引方式,比如上面所示一个 String 类型的字段 user_id,可以使用 keyword 类型做聚合和排序,使用 integer 来做范围查询,又由于 integer 作为范围较小的数据类型, 字段的长度也相对较短,使用它可以提高索引和搜索的效率。

相关推荐
智能相对论2 小时前
CES深度观察丨智能清洁的四大关键词:变形、出户、体验以及生态协同
大数据·人工智能
焦耳热科技前沿4 小时前
北京科技大学/理化所ACS Nano:混合价态Cu₂Sb金属间化合物实现高效尿素电合成
大数据·人工智能·自动化·能源·材料工程
min1811234564 小时前
深度伪造内容的检测与溯源技术
大数据·网络·人工智能
武子康5 小时前
大数据-209 深度理解逻辑回归(Logistic Regression)与梯度下降优化算法
大数据·后端·机器学习
数据智研5 小时前
【数据分享】(2005–2016年)基于水资源承载力的华北地区降水与地下水要素数据
大数据·人工智能·信息可视化·数据分析
TDengine (老段)7 小时前
TDengine Python 连接器入门指南
大数据·数据库·python·物联网·时序数据库·tdengine·涛思数据
亚古数据7 小时前
亚古数据:查询斯里兰卡公司可以获取什么文件和信息?
大数据·亚古数据·斯里兰卡公司查询
WLJT1231231237 小时前
守护自然与滋养民生的绿色之路
大数据·安全
min1811234567 小时前
PC端零基础跨职能流程图制作教程
大数据·人工智能·信息可视化·架构·流程图
静听松涛1338 小时前
中文PC端多人协作泳道图制作平台
大数据·论文阅读·人工智能·搜索引擎·架构·流程图·软件工程