Elasticsearch & Full Text Search Systems · บทเรียน

ชนิดฟิลด์แบบซ้อนและออบเจ็กต์

เรียนรู้ว่า Elasticsearch จัดการออบเจ็กต์และอาร์เรย์ JSON อย่างไร เหตุใดชนิดออบเจ็กต์เริ่มต้นจึงทำให้ข้อมูลแบนราบ และชนิด nested รักษาความสัมพันธ์ภายในอาร์เรย์ของออบเจ็กต์ได้อย่างไร

บทเรียน 4 จาก 413 ขั้นตอน

ชนิดฟิลด์แบบซ้อนและออบเจ็กต์ เป็นบทเรียน Elasticsearch & Full Text Search Systems ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Elasticsearch & Full Text Search Systems และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Elasticsearch & Full Text Search Systems มีบทเรียนทั้งหมด 4 บทเรียน

บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ

Storing Structured Data

Real-world documents often contain nested structures: a blog post with comments, a product with variants, or an order with line items. Elasticsearch must decide how to index these JSON objects so they stay searchable.

This lesson covers the two main approaches: the default object type and the specialized nested type.

The Default object Type

By default, any JSON object inside a document is mapped as the object type. Elasticsearch flattens the inner fields into dotted paths.

A field author.name simply becomes a normal Lucene field. This is efficient and works perfectly for single objects.

PUT my_index/_doc/1
{
  "author": { "first": "Jane", "last": "Doe" }
}

How Flattening Looks

Internally the object above is stored as two flat fields: author.first = Jane and author.last = Doe. The hierarchy is only conceptual; Lucene sees independent fields.

This is fine until you have an array of objects.

The Flattening Problem

Consider an array of users. After flattening, Elasticsearch loses the link between which first name belongs to which last name.

The arrays become user.first = [Alice, John] and user.last = [White, Smith] separately.

PUT my_index/_doc/2
{
  "user": [
    { "first": "Alice", "last": "White" },
    { "first": "John",  "last": "Smith" }
  ]
}

Why It Matters

A query for first = Alice AND last = Smith would incorrectly match the document above, because the cross-object relationship is gone. The values are pooled together.

The nested type solves this.

Declaring a Nested Field

Set the field type to nested in the mapping. Each object in the array is then indexed as a hidden, separate Lucene document, preserving its internal field relationships.

PUT my_index
{
  "mappings": {
    "properties": {
      "user": { "type": "nested" }
    }
  }
}

Querying Nested Fields

You must use a nested query and specify the path. Conditions inside are evaluated against a single sub-document, so cross-object false matches disappear.

GET my_index/_search
{
  "query": {
    "nested": {
      "path": "user",
      "query": {
        "bool": { "must": [
          { "match": { "user.first": "Alice" }},
          { "match": { "user.last":  "Smith" }}
        ]}
      }
    }
  }
}

Inner Hits

Add inner_hits to a nested query to return which specific sub-document(s) matched, not just the parent document. This is essential for highlighting the relevant array element.

"nested": {
  "path": "user",
  "inner_hits": {},
  "query": { "match": { "user.first": "Alice" } }
}

Costs of Nested

Nested fields are powerful but have trade-offs:

  • Each array element is a separate Lucene doc, increasing index size.
  • Updating one element re-indexes the whole parent document.
  • Deeply nested or large arrays can hurt performance.

Use the index.mapping.nested_objects.limit setting to cap counts.

Nested vs join

For tightly coupled data that updates together, nested is ideal. For independently updated, high-cardinality relationships, consider the join (parent-child) field type instead, which decouples updates at a higher query cost.

When to Choose Which

Use object when arrays do not require cross-field correlation. Use nested when you must match multiple fields within the same array element. Defaulting to nested for everything wastes resources.

Quick Check

Test your understanding of nested mappings.

Recap

You learned how Elasticsearch indexes JSON objects:

  • The default object type flattens fields and pools array values.
  • The nested type indexes each array element separately to preserve relationships.
  • Query nested fields with the nested query plus a path, and use inner_hits to find matching elements.
  • Nested types cost more storage and require full re-indexing on element updates.
เริ่มต้นได้ฟรี

เรียนรู้ Elasticsearch & Full Text Search Systems ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
12
บทเรียน
48

คำถามที่พบบ่อย

บทเรียน “ชนิดฟิลด์แบบซ้อนและออบเจ็กต์” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ชนิดฟิลด์แบบซ้อนและออบเจ็กต์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Elasticsearch & Full Text Search Systems ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Elasticsearch & Full Text Search Systems มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ชนิดฟิลด์แบบซ้อนและออบเจ็กต์”

เรียนรู้ว่า Elasticsearch จัดการออบเจ็กต์และอาร์เรย์ JSON อย่างไร เหตุใดชนิดออบเจ็กต์เริ่มต้นจึงทำให้ข้อมูลแบนราบ และชนิด nested รักษาความสัมพันธ์ภายในอาร์เรย์ของออบเจ็กต์ได้อย่างไร คุณปฏิบัติ Elasticsearch & Full Text Search Systems ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Elasticsearch & Full Text Search Systems หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Elasticsearch & Full Text Search Systems บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “ชนิดฟิลด์แบบซ้อนและออบเจ็กต์” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Elasticsearch & Full Text Search Systems นี้ได้ไหม

ได้ บทเรียน Elasticsearch & Full Text Search Systems ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การปรับแต่งการแมปฟิลด์
  2. การแมปแบบไดนามิกเทียบกับการแมปแบบชัดเจน
  3. เทมเพลตดัชนีและชื่อแทน
  4. ชนิดฟิลด์แบบซ้อนและออบเจ็กต์
← กลับไปที่ Elasticsearch & Full Text Search Systems