zoukankan      html  css  js  c++  java
  • Elasticsearch : alias数据类型

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

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

    • 它可以用来代替搜索请求中的目标(target)字段
    • 以及其它的被选定的API中

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

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

    • 它必须是一个具体的字段(不是一个对象或者是另外一个alias)
    • 它必须在alias被创建时已经存在
    • 如果是一个nested的对象,那么alias必须具有和它的目标具有同样的nested scope

    一个alias的应用例子

    下面,我们来用一个具体的例子来说说明。我们首先来定义一个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,我们可以照样把我们的统计数据搜索出来。
    不被支持的API

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

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

    • 不支持写入字段别名:尝试在索引或更新请求中使用别名将导致失败。 同样,别名不能用作copy_to的目标或多字段。
    • 由于文档源中不存在别名,因此在执行源过滤时不能使用别名。 例如,以下请求将返回_source的空结果:
  • 相关阅读:
    HTTP 错误 500.19 配置文件错误 ( 0x8007000d,0x80070032)
    system.web下的HttpModules节点和system.webServer下的modules节点的配置区别
    索引超出了数组界限(Microsoft.SqlServer.Smo)
    VS 附加进程调试 Web项目
    VS 调试 无法启动IIS Express Web 服务器(进程不存在)
    java基础面试题
    给dubbo接口添加白名单——dubbo Filter的使用
    mysql行转列转换
    Spring透过ApplicationListener来触发contextrefreshedevent事件
    spring mvc之请求过程源码分析
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/12084448.html
Copyright © 2011-2022 走看看