【Elastic Engineering】Elasticsearch : alias 数据类型

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Elasticsearch : alias 数据类型

作者:刘晓国


就像其他的很多语言一样,我们可以给已有的变量取一个别名(alias)。即便是对高级语言一样,比如我们定义不同的指针变量,指向同一个内存空间。这个有些类似别名的概念。


Elasticsearch中,我们也可以为index中的一个字段(field)取一个另外的名字:


它可以用来代替搜索请求中的目标(target)字段

以及其它的被选定的API中

通常alias可以用来帮助我们重新命名一个字段,并让这个字段的名称符合我们的命名规则。我们可以参考ECS。通过alias的使用,可以使得我们的字段根据符合ECS标准。一个字段的alias只能有一个目标字段。


在使用alias时,字段别名的目标有一些限制:


它必须是一个具体的字段(不是一个对象或者是另外一个alias)

它必须在alias被创建时已经存在

如果是一个nested的对象,那么alias必须具有和它的目标具有同样的nested scope


例子 一


下面,我们来用一个具体的例子来说说明。我们首先来定义一个index的mapping如下:

PUT trips
{
  "mappings": {
    "properties": {
      "distance": {
        "type": "long"
      },
      "route_length_miles": {
        "type": "alias",
        "path": "distance" 
      },
      "transit_mode": {
        "type": "keyword"
      }
    }
  }
}

现在我们输入一下的两个文档,并搜索:

PUT trips/_doc/1
{
  "distance": 100,
  "transit_mode": "mode1"
}
PUT trips/_doc/2
{
  "distance": 50,
  "transit_mode": "mode2"
}
GET _search
{
  "query": {
    "range" : {
      "route_length_miles" : {
        "gte" : 60
      }
    }
  }
}

显示的结果是:

{
  "took" : 346,
  "timed_out" : false,
  "_shards" : {
    "total" : 20,
    "successful" : 20,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "trips",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "distance" : 100,
          "transit_mode" : "mode1"
        }
      }
    ]
  }
}

从上面可以看出来,虽然我们没有使用在source中的distance,但是我们使用它的别名route_length_miles,我们可以照样把我们的统计数据搜索出来。


例子 二


我们定义如下的一个 mapping:

PUT logs_server
{
  "mappings": {
    "properties": {
      "http": {
        "properties": {
          "request": {
            "properties": {
              "method": {
                "type": "alias",
                "path": "method.keyword"
              }
            }
          }
        }
      },
      "method": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

在上面,我们定义了两个字段,其中的一个字段是 alias:


method.keyword

http.request.method


其中 http.request.method 被定义为 alias 指向 method.keyword。运行上面的指令,并执行如下的操作:

PUT logs_server/_doc/1
{
  "method": "GET"
}

我们可以通过如的方法来进行搜索:

GET logs_server/_search
{
  "query": {
    "match": {
      "http.request.method": "GET"
    }
  }
}

显示结果:

{
  "took" : 957,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "logs_server",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.2876821,
        "_source" : {
          "method" : "GET"
        }
      }
    ]
  }
}


不被支持的API


不支持写入字段别名:尝试在索引或更新请求中使用别名将导致失败。 同样,别名不能用作copy_to的目标或多字段。


由于文档源中不存在别名,因此在执行源过滤时不能使用别名。 例如,以下请求将返回_source的空结果:

 

不支持写入字段别名:尝试在索引或更新请求中使用别名将导致失败。 同样,别名不能用作copy_to的目标或多字段。
由于文档源中不存在别名,因此在执行源过滤时不能使用别名。 例如,以下请求将返回_source的空结果:


相关实践学习
利用Elasticsearch实现地理位置查询
本实验将分别介绍如何使用Elasticsearch7.10版本进行全文检索、多语言检索和地理位置查询三个Elasticsearch基础检索子场景的实现。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
2月前
|
测试技术 定位技术 API
万字长文:一文彻底搞懂Elasticsearch中Geo数据类型查询、聚合、排序
万字长文:一文彻底搞懂Elasticsearch中Geo数据类型查询、聚合、排序
94849 140
|
2月前
|
运维 架构师 搜索推荐
7 年+积累、 Elastic 创始人Shay Banon 等 15 位专家推荐的 Elasticsearch 8.X新书已上线...
7 年+积累、 Elastic 创始人Shay Banon 等 15 位专家推荐的 Elasticsearch 8.X新书已上线...
39 4
|
2月前
|
存储 安全 数据处理
Elastic 中国开发者大会2023最新干货——Elasticsearch 7、8 新功能一网打尽
Elastic 中国开发者大会2023最新干货——Elasticsearch 7、8 新功能一网打尽
31 0
|
7月前
|
搜索推荐 索引
Elasticsearch elastic io 100%,但磁盘的iops和吞吐量没爆没啥原因吗?
Elasticsearch elastic io 100%,但磁盘的iops和吞吐量没爆没啥原因吗?
108 3
|
7月前
|
存储 缓存 监控
Elasticsearch elastic io 100%,但磁盘的iops和吞吐量没爆没啥原因吗?
Elasticsearch elastic io 100%,但磁盘的iops和吞吐量没爆没啥原因吗?
102 2
|
9月前
|
存储 自然语言处理 监控
ElasticSearch第三讲:ES详解 - Elastic Stack生态和场景方案
ElasticSearch第三讲:ES详解 - Elastic Stack生态和场景方案
100 0
|
存储 算法 定位技术
ElasticSearch 之 数据类型
ElasticSearch 之 数据类型
316 0
|
存储 搜索推荐 大数据
大数据数据存储的搜索引擎Elasticsearch的数据类型的复杂类型
在使用搜索引擎Elasticsearch存储大数据时,了解其数据类型是非常重要的。除了基础数据类型之外,Elasticsearch还支持多种复杂数据类型,这些数据类型通常用于存储结构化数据和关联数据。在本文中,我们将会介绍Elasticsearch的复杂数据类型。
76 0
|
存储 自然语言处理 搜索推荐
大数据数据存储的搜索引擎Elasticsearch的数据类型的基础类型
在使用搜索引擎Elasticsearch存储大数据时,了解其数据类型是非常重要的。Elasticsearch支持多种数据类型,包括基础类型和复合类型。在本文中,我们将会介绍Elasticsearch的基础数据类型。
111 0
|
数据采集 数据可视化 搜索推荐
带你读《Elastic Stack 实战手册》之3:——3.1.1.从 Elasticsearch 到 Elastic Stack(上)
带你读《Elastic Stack 实战手册》之3:——3.1.1.从 Elasticsearch 到 Elastic Stack(上)
228 0

热门文章

最新文章

相关产品

  • 检索分析服务 Elasticsearch版