ElasticsearchCRUD使用(九)【Elasticsearch父子,孙子节点文件和路由】

用Python实现四叉树(quad tree) import numpy as np #正方形类 class square: #lx、ly为左上角坐标(x对应行号,y对应列号),rx、ry为右下角坐标 def __init__(self,lx,ly,rx,ry): self.lx=lx self.ly=ly self.rx=rx self.ry=ry #检查该矩阵中是否满足条件 #参数:原矩阵,阈值 #返回值:布尔类型 def check(s 阅读详情

本文介绍如何使用ElasticsearchCRUD在Elasticsearch中创建父,子和孙子文档。 如果创建相互关联的文档,那么文件全部保存到Elasticsearch中的同一个分片很重要。 搜索性能更好,如果可以为搜索定义特定的分片。

当创建父文档和子文档关系时,父定义对于子文档是足够的。 这样可确保将子文档保存到同一分片中。 一旦使用了孙子文档,就需要一个路由定义,否则孙子文档不会总是被保存到同一个分片中,创建子文档的所有优点都将丢失。

步骤1:定义文档模型

在本应用程序中使用了LeagueCup,Team 和Player 类。 LeagueCup类是父类。 它有一个Team类的列表。 Team类有一个子Player类的列表。 我们希望将所有文档保存在同一个索引中,并确保将子文件和孙子节文档保存到同一个分片中。 子文档需要Key属性定义,以便ElasticsearchCrud知道哪个属性被用作_id定义。

public class LeagueCup
{
    public long Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public List<Team> Teams { get; set; }
}

public class Team
{
    [Key]
    public long Id { get; set; }
    public string Name { get; set; }
    public string Stadium { get; set; }
    public List<Player> Players { get; set; }
}

public class Player
{
    [Key]
    public long Id { get; set; }
    public string Name { get; set; }
    public int Goals { get; set; }
    public int Assists { get; set; }
    public string Position { get; set; }
    public int Age { get; set; }
}

步骤2:使用正确的映射创建索引

要使用映射创建索引,需要更改ElasticsearchCRUD中上下文的默认配置。 ElasticsearchSerializerConfiguration Config包含所有必需的配置。 我们希望将每个子文档保存为单独的映射或索引类型,并且还可以处理每种类型的所有子文档。 使用UserDefinedRouting,路由也被强制用于子文档。 这不是默认的,因为如果没有使用孙子文档,这不是必需的。 Elasticsearch中的默认配置将完整的子树保存为嵌套项,处理所有子项,并且不添加路由。

不同类型也需要映射定义。 默认情况下,每种类型将被保存到自己的索引中。 这是改变,所以关系中的所有类型都保存到相同的索引:leagues。

private static readonly IElasticsearchMappingResolver ElasticsearchMappingResolver = new ElasticsearchMappingResolver();
private const bool SaveChildObjectsAsWellAsParent = true;
private const bool ProcessChildDocumentsAsSeparateChildIndex = true;
private const bool UserDefinedRouting = true;
private static readonly ElasticsearchSerializerConfiguration Config = new ElasticsearchSerializerConfiguration(ElasticsearchMappingResolver, SaveChildObjectsAsWellAsParent,
  ProcessChildDocumentsAsSeparateChildIndex, UserDefinedRouting);

private const string ConnectionString = "http://localhost:9200";

static void Main(string[] args)
{
  //定义类型的映射,以便所有使用与父级相同的索引
ElasticsearchMappingResolver.AddElasticSearchMappingForEntityType(typeof(LeagueCup), MappingUtils.GetElasticsearchMapping("leagues"));
  ElasticsearchMappingResolver.AddElasticSearchMappingForEntityType(typeof(Team), MappingUtils.GetElasticsearchMapping("leagues"));
  ElasticsearchMappingResolver.AddElasticSearchMappingForEntityType(typeof(Player), MappingUtils.GetElasticsearchMapping("leagues"));

  CreateIndexWithRouting();            
}

CreateIndexWithRouting方法创建一个新的索引,具有三种类型的映射。 context.CreateIndex()在三个不同的PUT请求中执行,每个类型一个。

private static void CreateIndexWithRouting()
{
     //使用路由作为子父关系。 如果您使用孙子文档,则需要这样做。
     //如果路由确保孙子文档保存到与父文档相同的分片。
     // --------------
     //如果仅使用父文档和子文档,则不需要路由。 子文档被保存
     //使用父定义与父文档相同的分片。
     // --------------
     //可以使用配置参数定义路由定义:ElasticsearchSerializerConfiguration中的UserDefinedRouting
    //var config = new ElasticsearchSerializerConfiguration(ElasticsearchMappingResolver, SaveChildObjectsAsWellAsParent,
    //  ProcessChildDocumentsAsSeparateChildIndex, UserDefinedRouting);

    using (var context = new ElasticsearchContext(ConnectionString, Config))
    {
        context.TraceProvider = new ConsoleTraceProvider();

        //在Elasticsearch中创建索引
        //这创建了一个索引`leagues`和3种类型,leaguecup, team, player
        var ret = context.CreateIndex<LeagueCup>();
    }
}

具有父映射的创建索引如下发送:

PUT http://localhost:9200/leagues/ HTTP/1.1
Content-Type: application/json
Host: localhost:9200
Content-Length: 192
Expect: 100-continue
Connection: Keep-Alive

{
 "settings": { 
   "number_of_shards":5,
   "number_of_replicas":1
 },
 "mappings": {
   "leaguecup": {
     "properties": { 
       "id":{ "type" : "long" },
       "name":{ "type" : "string" },
       "description":{ "type" : "string" }
      }
   }
 }
}

发送第一个子类PUT请求如下所示。 路由仅使用必需属性定义。 不需要其他选项,因为如果使用属性,以下请求将发送到Elasticsearch,然后重新路由,这会导致性能损失。

PUT http://localhost:9200/leagues/team/_mappings HTTP/1.1
Content-Type: application/json
Host: localhost:9200
Content-Length: 174
Expect: 100-continue

{
 "team": {
  "_parent": {
     "type":"leaguecup"
  },
  "_routing": {
    "required":"true"
  },
  "properties": {
    "id": { "type" : "long" },
    "name":{ "type" : "string" },
    "stadium":{ "type" : "string" }
  }
 }
}

孙子类映射PUT请求发送如下:

PUT http://localhost:9200/leagues/player/_mappings HTTP/1.1
Content-Type: application/json
Host: localhost:9200
Content-Length: 265
Expect: 100-continue

{ 
 "player": {
   "_parent":{"type":"team"},
   "_routing":{"required":"true"},
   "properties":{"id":{ "type" : "long" },
     "name":{ "type" : "string" },
     "goals":{ "type" : "integer" },
     "assists":{ "type" : "integer" },
     "position":{ "type" : "string" },
     "age":{ "type" : "integer" }
   }
  }
}

步骤3:添加LeagueCup文档

现在索引和类型映射存在,可以添加一个新的LeagueCup文件。

private static long CreateNewLeague()
{
    var swissCup = new LeagueCup {Description = "Nataional Cup Switzerland", Id = 1, Name = "Swiss Cup"};

    using (var context = new ElasticsearchContext(ConnectionString, Config))
    {
        context.TraceProvider = new ConsoleTraceProvider();
        context.AddUpdateDocument(swissCup, swissCup.Id);
        context.SaveChanges();
    }

    return swissCup.Id;
}

添加文档请求作为批量请求的一部分发送。 ElasticsearchCRUD在bulk请求中发送所有添加,更新和删除请求。 然后可以将不同的请求优化为单个请求。 context.SaveChanges()发送所有待处理的请求。

POST http://localhost:9200/_bulk HTTP/1.1
Content-Type: application/json
Host: localhost:9200
Content-Length: 131
Expect: 100-continue

{"index":{"_index":"leagues","_type":"leaguecup","_id":"1"}}
{"id":1,"name":"Swiss Cup","description":"Nataional Cup Switzerland"}

步骤4:添加Team文档

team 请求使用父类LeagueCup的父ID发送。

/// <summary>
/// parentId是父对象的id
/// Elasticsearch需要路由标识,强制所有子对象都保存到同一个分片。 这对性能有好处。
/// 因为这是一个第一级的子级,所以routingId和parentId是一样的。
/// </summary>
private static long AddTeamToCup(long leagueId)
{
    var youngBoys = new Team {Id=2,Name="Young Boys", Stadium="Wankdorf Bern"};

    using (var context = new ElasticsearchContext(ConnectionString, Config))
    {
        context.TraceProvider = new ConsoleTraceProvider();
        context.AddUpdateDocument(youngBoys, youngBoys.Id, new RoutingDefinition { ParentId = leagueId, RoutingId = leagueId });
        context.SaveChanges();
    }

    return youngBoys.Id;
}

此请求使用父Id以及路由Id。 因为文档是一级的子级,所以两个id是相同的。

POST http://localhost:9200/_bulk HTTP/1.1
Content-Type: application/json
Host: localhost:9200
Content-Length: 136
Expect: 100-continue

{"index":{"_index":"leagues","_type":"team","_id":"2","_parent":1,"_routing":1}}
{"id":2,"name":"Young Boys","stadium":"Wankdorf Bern"}

步骤5:添加Player文档

然后可以将player添加到team父级的索引中,并将路由添加到leagueCup顶级父级。

static void AddPlayerToTeam(long teamId, long leagueId)
{
    var yvonMvogo = new Player { Id = 3, Name = "Yvon Mvogo", Age = 20, Goals = 0, Assists = 0, Position = "Goalkeeper" };

    using (var context = new ElasticsearchContext(ConnectionString, Config))
    {
        context.TraceProvider = new ConsoleTraceProvider();
        context.AddUpdateDocument(yvonMvogo, yvonMvogo.Id, new RoutingDefinition { ParentId = teamId, RoutingId = leagueId });
        context.SaveChanges();

PUT请求再次以bulk 请求发送。 这当然可以与以前的请求一起发送,但是demo目的是单独发送的。

POST http://localhost:9200/_bulk HTTP/1.1
Content-Type: application/json
Host: localhost:9200
Content-Length: 167
Expect: 100-continue

{"index":{"_index":"leagues","_type":"player","_id":"3","_parent":2,"_routing":1}}
{"id":3,"name":"Yvon Mvogo","goals":0,"assists":0,"position":"Goalkeeper","age":20}

现在索引中存在3个文档,可以从搜索引擎中选择文档。 player文档的GET请求需要父Id和路由Id。

private static Player GetPlayer(long playerId, long leagueId, long teamId)
{
    Player player;
    using (var context = new ElasticsearchContext(ConnectionString, Config))
    {
        context.TraceProvider = new ConsoleTraceProvider();
        player = context.GetDocument<Player>(playerId, new RoutingDefinition { ParentId = teamId, RoutingId = leagueId });
    }

    return player;
}

GetPlayer请求如下发送:

GET http://localhost:9200/leagues/player/3?parent=2&routing=1 HTTP/1.1
Host: localhost:9200

响应:

HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 167

{
 "_index":"leagues",
 "_type":"player",
 "_id":"3","_version":1,
 "found":true,"
 _source": { 
    "id":3,
    "name":
    "Yvon Mvogo",
    "goals":0,
    "assists":0,
    "position":"Goalkeeper",
    "age":20
  }
}

结论:

在Elasticsearch中定义和使用子文档和孙子文档非常简单。 如果要优化搜索性能,则需要将文档保存到同一个分片。 这是通过路由实现的。 如果只使用父文件和子文档,则只需要父Id。 如果同时更新和添加所有树结构,也可以使用嵌套文档。 所有数据结构都有优缺点。 应根据您的要求选择正确的。

【Ablation Studies 理解】深度学习模型组件的对比实验/性能分析 Ablation Study 用于检测深度学习/机器学习模型中各部分构件对于整体的重要性。 可以理解为为:组件\tricks重要性测试、组件性能系统性分析、控制变量法、组件去除对比实验、性能敏感性测试、性能因子分析等 Ablation Studies 一些新颖的深度学习模型在论文中都会进行AblationStudy,这部分的主要意义在于系统性的移除模型中的各种组件/trick等因子或者是创新的... 阅读详情

相关推荐

AD9826的时序分析及Verliog代码

AD9826的时序分析及Verliog代码 (本文对AD9826的模式和时序进行了分析,如有错误敬请指正,关于这款ADC芯片的基本参数,本文不做过多介绍) 1、AD9826的模式 AD9826的采样模式主要有两种,一种是“CDS模式”,一种是“SHA模式”;在这两种模式下分别有1通道、2通道、3通道的采样模式 (1)CDS模式 简单的来说CDS模式就是,有两个采样时钟,一个是ADCCLK1,用来采样CCD波形的参考电平,一个是ADCCLK2用来采样数据电平,然后经过,偏移量调节,再经过PGA增益放大最

m0_50102488的博客 6468

es父子结构查询_探索ES-嵌套对象和父子对象(四)

前文回顾之前讲完了探索ES-对象和嵌套对象(三),今天继续深入讲讲父子结构。嵌套对象上篇有讲到嵌套对象可以解决数组对象不能关联查询的问题。但是,嵌套对象也有一些不足之处。因为ES的文档是不可修改的,所以每次修改了子对象,都需要重新创建一个新的文档对象。这种实现方式会导致增大修改的开销。那是不是有一种方式可以在修改子对象的时候,不会影响到父对象呢?下面介绍的父子对象可以解决这个问题。父子对象我们先来...

weixin_39751453的博客 894

解决VMWare ESXi PCIe直通显卡导致的DevicePowerOn启动故障

本文详细解析了VMWare ESXi中PCIe直通显卡导致的DevicePowerOn启动故障,重点分析了MMIO空间不足的根本原因,并提供了完整的解决方案。通过修改.vmx文件中的关键参数,如pciPassthru.64bitMMIOSizeGB,可以有效解决显存分配问题。文章还涵盖了硬件兼容性检查、性能调优技巧及大规模部署的实战案例,帮助用户彻底解决显卡直通难题。

weixin_42537919的博客 573

elasticsearch 基础 —— Parent-Child 父子关系(5.X老版本)

ElasticSearch 中的Parent-Child关系和nested模型是相似的, 两个都可以用于复杂的数据结构中,区别是 nested 类型的文档是把所有的实体聚合到一个文档中而Parent-Child现对于比较独立,每个实体即为一个文档 Parent-Child 优点 1、父文档更新时不用重新为子文档建立索引 2、子文档的增加、修改、删除是对父文档和其他子文档没有任何影响的,这非常适用于...

JavaAlliance 1962

uni-app项目中引入Vant UI组件库(完美避坑!!!)纯净版

uni-app项目中引入Vant UI组件库(纯净版--无uni-ui)

Wzmlzrr的博客 3万+

【零基础入门哈希签名架构,从Lamport到SPHINCS+】第二集 哈希签名树 Merkle Tree Authentication

在第一集中,我们一直忽略了一个问题。设想一下,假如有一个Hacker(黑客),在截获到Sender发送给Receiver的公钥之后,把这个公钥改成Hacker自己的公钥,然后再发给Receiver,那么Receiver就会误认为这是Sender的公钥。所以我们之前所说放方案,其安全性都需要建立在一个前提下:Receiver需要确认公钥确实是Sender发出的。

m0_50572808的博客 2451

elasticseach 增删改查 ,包括各种组合查询(全)

1.创建索引 见官方文档:索引文档 | Elasticsearch: 权威指南 | Elastic 1.1单个创建 PUT /{index}/{type}/{id} { "field": "value", ... } 案例 website表示 索引的名字 bllog 表示 索引下面的分类 , 123 表示索引的id ,举例 比如 一个点上系统里面的产品 ,分类有 电子产品 ,我们就可以 索引的名字叫 product, type 叫electronic PUT /website/bl

huangweibbk的专栏 874

QT/C++实现健壮HTTP POST客户端:从基础到异常处理与性能优化

HTTP协议作为客户端与服务器通信的基石,其POST方法在数据提交、API交互等场景中扮演着核心角色。其工作原理基于请求-响应模型,通过封装TCP连接与协议细节,为应用层提供了简洁的数据传输接口。在C++桌面与嵌入式开发中,直接使用底层Socket实现HTTP不仅复杂且易出错,而利用框架进行高级封装能显著提升开发效率与代码健壮性。QT框架的`QNetworkAccessManager`等组件正是为此设计,它通过信号槽机制提供异步网络编程模型,有效管理连接与协议解析。一个健壮的HTTP客户端需要妥善处理网络波

weixin_29176179的博客 383

理解elasticsearch的parent-child关系

前面文章介绍了,在es里面的几种数据组织关系,包括array[object],nested,以及今天要说的Parent-Child。 Parent-Child与Nested非常类似,都可以用来处理一对多的关系,如果多对多的关系,那就拆分成一对多在处理。前面提到nested的缺点是对数据的更新需要reindex整个nested结构下的所有数据,所以注定了它的使用场景一定是查询多更新少的场景,如

三劫散仙 1万+

Arduino开发实例-EMG 肌肉信号传感器

在医学研究中,测量肌肉的活动、收缩和扩张非常重要。 EMG 肌肉传感器测量肌肉活动并产生信号以显示扩张和收缩量。 因此,输出取决于所选肌肉的活动量。 3 绿色、红色和黄色电极连接到模块,用于传输来自肌肉运动的电信号。

视觉与物联智能 1693

肖特基二极管选型参数,结构原理,工艺与注意问题总结

肖特基二极管(Schottky Diode)是一种特殊的二极管,也被称为肖特基势垒二极管。它是利用金属与半导体接触形成的金属-半导体结原理制成的。与传统的PN结二极管相比,肖特基二极管具有更低的正向压降、更高的开关速度、更高的反向恢复时间以及更好的温度稳定性等特点。本文对肖特基二极管的工作原理,结构特点,工艺流程,选型参数及设计注意事项进行总结。

fydar的博客 812

Elasticsearch索引的父子关系(index parent-child)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34221773的博客 610

GEE案例:计算区域生态总体脆弱性分析

计算区域生态总体脆弱性分析需要考虑多个指标和因素。下面是一个基本的方法:选择指标:选择一组能够反映区域生态系统脆弱性的指标。这些指标可以包括生物多样性指数、森林覆盖率、湿地保护率、土地退化程度等。为每个指标分配权重:为了使得各指标在计算中的重要性相对均衡,可以为每个指标分配一个权重。权重可以根据各指标的重要性和可利用的数据进行确定。数据收集和处理:收集每个指标的数据,并对其进行处理,确保数据的准确性和一致性。如果有需要,可以对数据进行归一化处理。计算指标值:根据收集的数据和权重,计算每个指标的值。

此星光明博客 464

ElasticSearch 使用 Inner_hits 查询Parent-Child(父子)文档 - 1.50新特性

inner_hits文档:http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-inner-hits.html#parent-child-inner-hits (ElasticSearch 1.50+ 可用)        在使用搜索“has-child”搜索父文档时,一般情况只

雷雨中的双桅船 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

elasticsearch进行parent/child类型聚合的测试

elasticsearch进行parent/child类型聚合的测试: 1、查询父类型可以inner_hits得到子类型数据,反之也行 { "query": { "has_child": { "query": { "match": { "lid": "00000" } }, "child_typ

没事儿偷着乐 3928

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

elasticsearch 学习之父子关联查询 parent/child

parent-child 关系 关联关系,可以为两个完全分开的文档,可以将一种文档类型以一对多的关系关联到另一个上 优点: 1.parent文档的更新不需要重新为子文档重建索引 2.对子文档进行添加,更改,删除操作室不会影响父文档或者其他子文档 3.子文档可以被当做查询请求的结果返回 Elasticsearch 维护了一个父文档和子文档的映射关系,得益于这个映射,父-子文档关联查询操作非常快。但是...

qq_42285256的博客 2483

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ElasticSearch 父子文档使用简记

一. ES parent-child 文档简介 二. 父子文档的索引创建与数据插入 ES 父子文档的创建可以分为下面三步: 创建索引 Mapping,指明数据类型为 join 与父子文档名 插入父文档 插入子文档 下面针对每一步做演示。 1. 创建索引 假设我们有一个博客系统,每篇博客下有若干条评论,那么博客 blog 与评论 comment 就构成了一个父子关系。 2. 插入父文档 3. 插入子文档 4. 其他 构建多个子文档 构建多层父子关系 三. 父子文档的查询 基于父子文档的查询主要有三种:

艾希射日 4297

Elasticsearch 父子关系

Elasticsearch的父子关系在一定场景下非常有利于我们进行关联查询,合理使用能加快我们的索引速度。 父子关系图 对于Elasticsearch的 Parent and Child: 1.家庭关系: 2.学校关系: 3.等等关系我们都可以用父子关系来表示,这非常有利于我们进行父子关系的查询。 Parent and Child 有如下特点: 父子关系 每个父母有多个孩子 多个层次的亲子关系 这里我们使用汽车关系来进行相关展示: 创建相关索引 PUT family_tree { "sett

shenwei12534的博客 831

Elasticsearch | Nested-VS-ParentJoin

本文整理自网络。 parent-join 适用场景 Child documents can be added, changed, or deleted without affecting either the parent or other children. This is especially useful when child documents are large in number a...

伍六七的博客 1225

elasticsearch实现CRUD操作教程

文章目录简介elasticsearch 结构介绍索引操作(1)创建索引和表(2)删除索引(3)改变表结构增加数据修改数据删除数据查询数据(1)、ID 查询(2)、简单查询模糊查询短语查询多列查询分组聚合查询分组聚合计算Query String 查询【java 语法常用】范围查询(3)、Filter 查询(4)、复合查询(should/must/must_not) 本文是针对 elasticsea...

beautiful_huang的博客 1300

Elasticsearch CRUD 使用说明

&amp;amp;amp;amp;amp;lt;dependency&amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp;lt;groupId&amp;amp;amp;amp;amp;gt;org.springframework.boot&amp;amp;amp;amp;amp;lt;/groupId&amp;amp;amp;amp;amp;gt;

但行好事 莫问前程 1045

elasticsearch6.3.2中建立父子文档,并通过java api和rest api进行数据导入

首先6.3.2中只能有一个type,所以通过join datatype实现 首先我通过elasticsearch-head 创建mapping PUT  tikuindex {     "mappings":{         "tiku":{             "properties":{                 "questions_answer":{           ...

u013444338的博客 3611

xgboost安装_XGBoost 论文笔记

论文链接 Tree Boosting是一种高效且广泛使用的机器学习方法。这篇文章主要介绍了一种可扩展的end-to-end tress boosting的系统:XGBoost。这个方法被广泛使用在各种机器学习任务中并获得了state-of-art的效果。作者提出了一种sparsity-aware algorithm 来处理稀疏数据,还有weighted quantile sketch 来解决树的学...

weixin_39843677的博客 347

Elasticsearch: Join 数据类型

在Elasticsearch中,Join可以让我们创建parent/child关系。Elasticsearch不是一个RDMS。通常join数据类型尽量不要使用,除非不得已。那么Elasticsearch为什么需要Join数据类型呢? 在Elasticsearch中,更新一个object需要root object一个完整的reindex: 即使是一个field的一个字符的改变 即便是nest......

Elastic 中国社区官方博客 5165

Elasticsearch教程(12) ES 存储树形结构 整合Spring Data Elasticsearch

Query DSL + Java API 总结ES结构倒排索引元数据MappingDocument APISearch APIAggregations ES结构 倒排索引 元数据 Mapping Document API Search API Aggregations

Java Spring Elasticsearch 6384

Elasticsearch学习-父子文档

本文以Elasticsearch 6.8.4版本为例,介绍Elasticsearch父子文档的使用。 上一篇文章介绍了Elasticsearch的嵌套文档,这一篇来介绍另外一种关系文档,父子文档。 1、父子文档 父子文档在理解上来说,可以理解为一个关联查询,有些类似MySQL中的JOIN查询,通过某个字段关系来关联。 父子文档与嵌套文档主要的区别在于,父子文档的父对象和子对象都是独立的文档,而嵌套文档中都在同一个文档中存储,如下图所示: 这里引用官网的话,对比嵌套文档来说,父-子关系的主要优势有: .

大老杨的博客 1512
上一篇: ElasticsearchCRUD使用(八)【使用Elasticsearch和WebAPI导出CSV】
下一篇: ElasticsearchCRUD使用(十)【Elasticsearch类型与ElasticsearchCRUD的映射】
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值