Elasticsearch中的Nested類型詳解

一、Nested類型的介紹

Elasticsearch Nested類型是指將一個對象數組作為一個欄位進行索引。Nested類型是一種特殊的對象類型,它可以用來存儲在嵌套對象中包含的其他對象信息。這個Nested對象可看做是一個嵌套的對象和它的子文檔的集合,可以在同一個document中進行索引。

為了使用Nested類型,要使用下面三個步驟:

1、創建一個mapping

2、在該欄位上使用Nested類型,並在欄位中定義它內部的對象或屬性

3、存儲和查詢數據

{
   "mappings": {
      "properties": {
         "manufacturer": {
            "type": "nested",
            "properties": {
               "name": { "type": "text" },
               "location": { "type": "geo_point" }
            }
         }
      }
   }
}

二、Nested類型的應用場景

Nested類型主要應用於以下兩種情況:

1、嵌套的對象具有多個屬性,每個屬性都需要各自獨立地搜索。

2、嵌套的對象通常會作為一個整體來搜索,比如博客文章,具有標題、正文、標籤等屬性。

在這些情況下,Nested類型都可以發揮出很好的效果。然而,Nested類型也存在一些缺點。Nested類型會在內存中重複保存與其相關的文檔,因此在數據壓縮時,內存需求量會增加。

三、Nested類型的使用方式

1、創建Mapping

Nested類型必須在索引mapping時,作為一種複合類型進行定義。

PUT nested_test
{
  "mappings": {
    "properties": {
      "name": {"type": "keyword"},
      "age": {"type": "integer"},
      "sex": {"type": "keyword"},
      "notes": {
        "type": "nested",
        "properties": {
          "title": {"type": "text"},
          "content": {"type": "text"},
          "date": {"type": "date"}
        }
      }
    }
  }
}

2、索引文檔

Nested類型欄位的支持直接給定內部對象的一個數組,配合它的properties實現保存、查詢和表達式計算的支持。

PUT /index/_doc/1
{
  "name":"tom",
  "age":18,
  "sex":"male",
  "notes":[
    {
      "title":"note1",
      "content":"hello elasticsearch",
      "date":"2020-01-01"
    },
    {
      "title":"note2",
      "content":"hello nested type",
      "date":"2020-01-02"
    }
  ]
}

3、查詢Nested類型

在查詢時,Nested類型的欄位要進行特殊處理。要查詢內部的欄位時,必須使用dot notation指明嵌套欄位和其屬性名稱。

GET index/_search
{
  "query": {
    "nested": {
      "path": "notes",
      "query": {
        "bool": {
          "must": [
            {"match": {"notes.title": "note1"}},
            {"range": {"notes.date": {"gt":"2019-12-31"}}}
          ]
        }
      }
    }
  }
}

四、Nested類型的注意事項

1、嵌套欄位不能被映射為子文檔或其他同級的Object類型。

2、Nested類型內部如果有多個屬性,則每個屬性都是一個單獨的欄位。

3、Nested類型不支持聚合查詢。

4、嵌套文檔必須具備唯一標識。

5、查詢時,必須使用Nested類型的嵌套路徑。

6、存儲和查詢數據的性能延遲比較高。

五、總結

本篇文章通過介紹Nested類型的基本信息、使用方式及注意事項,讓讀者對Nested類型有了一個更深入的了解。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/190305.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-29 22:32
下一篇 2024-11-29 22:32

相關推薦

  • int類型變數的細節與注意事項

    本文將從 int 類型變數的定義、聲明、初始化、範圍、運算和類型轉換等方面,對 int 類型變數進行詳細闡述和講解,幫助讀者更好地掌握和應用 int 變數。 一、定義與聲明 int…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變數時顯示的指定變數類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • Python基本數字類型

    本文將介紹Python中基本數字類型,包括整型、布爾型、浮點型、複數型,並提供相應的代碼示例以便讀者更好的理解。 一、整型 整型即整數類型,Python中的整型沒有大小限制,所以可…

    編程 2025-04-29
  • Python中的Bool類型判斷

    本篇文章旨在講解Python中的Bool類型判斷。在Python中,Bool類型是經常使用的一種類型,因此掌握其用法非常重要。 一、True和False 在Python中,True…

    編程 2025-04-29
  • Python函數類型有哪些

    本文將從以下幾個方面詳細闡述Python函數類型。 一、內置函數 Python的內置函數是指在Python編程語言中提供的可以直接使用的函數,不需要通過導入模塊等方式引入。 部分常…

    編程 2025-04-29
  • Python變數類型用法介紹

    Python是一種解釋型編程語言,它提供了豐富的數據類型,包括數字、字元串、列表、元組、集合、字典等。Python變數類型的定義是Python程序開發的基礎,本文將從以下幾個方面對…

    編程 2025-04-28
  • Python中的整數類型int類總覽

    本文將從多個方面,對Python中的整數類型int類進行全面介紹和闡述。 一、數據類型及基本操作 在Python中,整數類型的數據類型為int。在Python3.x中,整數類型的范…

    編程 2025-04-28
  • Python查詢變數類型的函數

    本文將從多個方面詳細闡述Python中查詢變數類型的函數,主要包括以下幾點: 一、type()函數 type()函數是Python內置的函數,用於查詢變數的類型。它的使用非常簡單,…

    編程 2025-04-28
  • 為什麼Python函數定義中沒有對參數指定類型?

    Python是一種強類型語言,也就是說語言本身會強制要求變數的類型。但是在Python函數定義中,卻沒有要求對參數指定類型。這是為什麼呢? 一、簡化函數定義 Python語言簡單明…

    編程 2025-04-28
  • Python語言列表中的元素類型可以不相同

    Python語言的列表是一種有序的集合,可以包含任意數量和任意類型的Python對象,包括數字、字元串甚至是其他列表對象,這樣的特性稱為Python語言列表中的元素類型可以不相同。…

    編程 2025-04-28

發表回復

登錄後才能評論