索引树形数据

使用path_analyzer分析树形数据字段

索引非扁平数据

数据如下:

{
"book":{
"author":{
"name":{
"firstName":"Fyodor",
"lastName":"Dost"
}
},
"title":"Crime and Punishment",
"year":1886,
"characters":[
{
"name":"Raskolnikow"
},
{
"name":"Sofia"
}
]
}
}

注意到characters是个数组类型,author是json类型

那么该索引的映射定义:

{
"book":{
"properties":{
"author":{
"type":"object",
"properities":{
"name":{
"type":"object",
"properties":{
"firstName":{
"type":"string"
},
"lastName":{
"type":"string"
}
}
}
}
},
"title":{
"type":"string"
},
"year":{
"type":"integer"
},
"characters":{
"properties":{
"name":{
"type":"string"
}
}
}
}
}
}

Elasticsearch是无模式的,不必在创建映射就可以索引数据。Elasticsearch的动态行为默认是打开的,可为字段的定义添加“dynamic”属性,属性值设为false,或者在elasticsearch.yml配置文件中加入index.mapper.dynamic=false

索引关系型数据

使用嵌套对象

某些情况下使用嵌套文档更加方便,基本上,通过使用嵌套对象,Elasticsearch允许我们连接一个主文档和多个附属文档,主文档和嵌套文档一起被索引。但是,更新嵌套文档时,必须同时索引父文档和其他所有嵌套文档

嵌套对象的定义的时候字段类型为nested,定义方式可以参考Object类型。

对嵌套文档的查询DSL如下:

{
"query":{
"nested":{
"path":[
"fileds"
]
},
"query":{ }
}
}

nested指定查询嵌套文档。path属性指定了嵌套对象的名称(可以是多个)。nested中的query部分是一个标准的查询,嵌套对象的字段名称应该是完整的路径。

当然,还可以使用嵌套过滤器

评分与嵌套查询

除了path属性外,还有一个score_mode属性可以设置,即嵌套查询的得分和最外层query查询得分的组合方式。取值有:avg(默认),total,max,none

使用主从关系

ElasticSearch 中的Parent-Child关系和nested模型是相似的, 两个都可以用于复杂的数据结构中,区别是 nested 类型的文档是把所有的实体聚合到一个文档中而Parent-Child现对于比较独立,每个实体即为一个文档

Parent-Child 优点

1、父文档更新时不用重新为子文档建立索引

2、子文档的增加、修改、删除是对父文档和其他子文档没有任何影响的,这非常适用于子文档非常大并且跟新频繁的场景

3、子文档也可以查询结果返回

ElasticSearch 内部维护一个map来保存Parent-Child之间的关系,正是由于这个map,所以关联查询能够做到响应速度很快,但是确实有个限制是Parent 文档和所有的Child 文档都必须保存到同一个shard中

ElasticSearch parent-child ID的映射是存到Doc value 中的,有足够的内存时响 应是很快的。当这个map很大的时候,还是有要有一部分存储在硬盘中的。

旧版本主从关系在新版本发生了变化。

https://www.elastic.co/guide/en/elasticsearch/reference/current/parent-join.html

Elasticsearch--扩展索引结构的更多相关文章

  1. ElasticSearch 学习记录之如任何设计可扩容的索引结构

    扩容设计 扩容的单元 一个分片即一个 Lucene 索引 ,一个 Elasticsearch 索引即一系列分片的集合 一个分片即为 扩容的单元 . 一个最小的索引拥有一个分片. 一个只有一个分片的索引 ...

  2. Elasticsearch 创建以及修改索引结构

    从问题出发,这篇内容可以解决以下几个问题: 一:如何开启关闭Es索引(数据库)? 二:如何创建索引(数据库)结构? 三:如何向已有索引(数据库)中添加类型(表)结构? 四:如何向已有类型(表)中添加新 ...

  3. ElasticSearch+Kibana 索引操作

    ElasticSearch+Kibana 索引操作 一 前言 ElasticiSearch 简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引 ...

  4. ES 10 - Elasticsearch的索引别名和索引模板

    目录 1 索引模板概述 1.1 什么是索引模板 1.2 索引模板中的内容 1.3 索引模板的用途 2 创建索引模板 3 查看索引模板 4 删除索引模板 5 模板的使用建议 5.1 一个index中不能 ...

  5. 【基础篇】elasticsearch之索引模板Template[转]

    一,模板简述:template大致分成setting和mappings两部分:索引可使用预定义的模板进行创建,这个模板称作Index templates.模板设置包括settings和mappings ...

  6. ELK学习笔记之ElasticSearch的索引详解

    0x00 ElasticSearch的索引和MySQL的索引方式对比 Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤.特别是它对多条件的过滤支持非常好,比如年龄 ...

  7. Elasticsearch的索引模块(正排索引、倒排索引、索引分析模块Analyzer、索引和搜索、停用词、中文分词器)

    正向索引的结构如下: “文档1”的ID > 单词1:出现次数,出现位置列表:单词2:出现次数,出现位置列表:…………. “文档2”的ID > 此文档出现的关键词列表. 一般是通过key,去 ...

  8. Spring Boot + Elasticsearch 实现索引批量写入

    在使用Eleasticsearch进行索引维护的过程中,如果你的应用场景需要频繁的大批量的索引写入,再使用上篇中提到的维护方法的话显然效率是低下的,此时推荐使用bulkIndex来提升效率.批写入数据 ...

  9. 学习索引结构的一些案例——Jeff Dean在SystemML会议上发布的论文(下)

    [摘要] 除了范围索引之外,点查找的Hash Map在DBMS中起着类似或更重要的作用. 从概念上讲,Hash Map使用Hash函数来确定性地将键映射到数组内的随机位置(参见图[9 ],只有4位开销 ...

  10. 索引很难么?带你从头到尾捋一遍MySQL索引结构,不信你学不会!

    前言 Hello我又来了,快年底了,作为一个有抱负的码农,我想给自己攒一个年终总结.自上上篇写了手动搭建Redis集群和MySQL主从同步(非Docker)和上篇写了动手实现MySQL读写分离and故 ...

随机推荐

  1. Linux下使用make install安装的软件如何卸载

    如果是Ubuntu的系统,那么可以使用checkinstall来生成deb包来安装,然后卸载 参考:http://blog.sina.com.cn/s/blog_4178f4bf0101cmt7.ht ...

  2. crontab not running

    there are mutliple ways to describle this issue 1. crontab not running 2. crontab not running and no ...

  3. 8.跟我学solr---UpdateRequestProcessor具体解释

    简单介绍 java web开发的同学应该非常熟悉,在开发中常常会使用filter来处理请求中的一些切面需求. solr也提供类似的一种链式结构的handler来满足在加入数据索引请求的时候.通过切片的 ...

  4. 用JAVA生成老电影海报

    先看图,再讲原理.生成效果对照: 机器全自己主动生成.是不是非常酷炫?:) 数字图像,由无数个像素组成,通常情况下,每一个像素包括有RGB三个值,算法原理事实上非常easy: 一,遍历全部像素,将RG ...

  5. MVC 登录后重定向来最初请求的 URL

    1.在登录的“Action” 方法中接收“ReturnUrl”参数. 2.在验证登录的“Action”方法中登录成功后,判断如果“ReturnUrl”不为空就跳转到“ReturnUrl”指向的页面. ...

  6. CCBPM工作流引擎的消息机制与设计

    keyword:ccflowjflow 消息机制流程引擎 自己主动发送短信 发送邮件 发送消息 流程引擎微信连接 消息接口 关于ccbpm: 我们把ccflow jflow两个版本号的工作流引擎统称为 ...

  7. 使用Hibernate防止SQL注入的方法

    之前写代码,往后台传入一个组织好的String类型的Hql或者Sql语句,去执行. 这样其实是很蠢的一种做法!!!! 举个栗子~~ 我们模仿一下用户登录的场景: 常见的做法是将前台获取到的用户名和密码 ...

  8. mssql 中的二进制返回数据

  9. 【Codevs1080】质数环

    http://codevs.cn/problem/1031/ 不讲什么,预处理素数+搜索 // <C.cpp> - Sun Oct 9 12:58:23 2016 // This file ...

  10. iphone分辨率大全

    分辨率越高,屏幕质量也就越高越清晰,iphone的近几代产品处了从3GS到4代时有一个突破性的变化(当然那个时候3GS像素确实太低了),其他的几代产品在这项指标上并未有太大的变化. iphone分辨率 ...