前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >elasticsearch数据类型Alias介绍

elasticsearch数据类型Alias介绍

作者头像
xdd
发布2022-07-12 14:23:21
6270
发布2022-07-12 14:23:21
举报
文章被收录于专栏:java技术鸡汤

最近打算写一些关于ES(elasticsearch),又名分布式搜索的的相关知识介绍,先简单介绍一下其中的数据类型,关于什么叫索引,什么叫文档,以及如何来操作都会慢慢介绍的。


Alias field type

Field type:alias(别名)

可以给索引中定义的具体字段field映射一个别名alias,可以在搜索请求中使用别名来代替索引中定义的field。

下面是创建一个映射关系:

代码语言:javascript
复制
curl -X PUT "localhost:9200/trips?pretty" -H 'Content-Type: application/json' -d'
{
  "mappings": {
    "properties": {
      "distance": {
        "type": "long"
      },
      "route_length_miles": {
        "type": "alias",
        "path": "distance" 
      },
      "transit_mode": {
        "type": "keyword"
      }
    }
  }
}
'
代码语言:javascript
复制
curl -X GET "localhost:9200/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "query": {
    "range" : {
      "route_length_miles" : {
        "gte" : 39
      }
    }
  }
}
'

可以通过上面的报文,我们可以看到定义了一个索引为trips的映射关系,该映射关系中包含3个field:

  • distance
  • transit_mode
  • route_length_miles

其中route_length_miles的type是Alias,映射指向的是field为distance,意思就是说如果我查询route_length_miles,也就相当于查询distance的值

下面的搜索请求,可以看出,是一个范围range查询,请求中的field是route_length_miles,要求是该值大于39,符合这个条件的所有文档就会被过滤出来

需要注意的是:route_length_miles中有一个path的属性,该值指向的是别名所要映射到的field,而且必须是全路径,包含其父路径,比如 obj1.obj2.field

几乎所有的查询请求都是接受field的别名的。尤其是,别名可以被用在query,聚集,排序等相关的field,也包含哪些请求docvalue_fields,stored_fields,suggestions,highlights。当通过使用脚本来访问field的value的时候,也是支持别名的。

在搜索请求的某些部分以及请求字段功能时,可以提供字段通配符模式。在这些情况下,通配符模式除了具体字段外,还将匹配字段别名:

代码语言:javascript
复制
curl -X GET "localhost:9200/trips/_field_caps?fields=route_*,transit_mode&pretty"

别名alias的使用限制

当使用alias别名的时候,也是存在一些限制的,下面会列举一下:

  • 别名所对应的具体的field,应该是一个具体的field,而不应该是一个object或者其他field的别名
  • 目标field应该在创建alias的时候存在
  • 如果定义的是一个nested object(内嵌对象),field的别名必须有相同的内嵌结构范围同其目标field

此外还需要注意:一个别名只能对应一个field。

可以通过更新映射关系来更新别名对应的映射field


不支持的API

  • 不支持向type为alias对应的field中写入
  • 不支持type为alias的field作为目标field,进行copy_to或者多field

由于document _source中不存在别名,因此在执行源筛选时不能使用别名。例如,以下请求将为_source返回空结果:

代码语言:javascript
复制
curl -X GET "localhost:9200/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "query" : {
    "match_all": {}
  },
  "_source": "route_length_miles"
}
'

最后,一些查询(例如term,geo_shape和more_like_this)允许从索引文档中获取查询信息。因为在获取文档时不支持字段别名,所以查询中指定查找路径的部分不能通过其别名引用字段。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java技术鸡汤 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档