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的空結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM