ES中index和type区分

参考:
https://bayescafe.com/database/elasticsearch-using-index-or-type.html
https://www.cnblogs.com/huangfox/p/9460361.html

elasticsearch-中的索引与类型的前生今世

1. type理解

1.1 Type 是什么

使用 type 允许我们在一个 index 里存储多种类型的数据,这样就可以减少 index 的数量了。在使用时,向每个文档加入 _type 字段,在指定 type 搜索时就会被用于过滤。使用 type 的一个好处是,搜索一个 index 下的多个 type,和只搜索一个 type 相比没有额外的开销 —— 需要合并结果的分片数量是一样的。

但是,这也是有限制的:

  • 不同 type 里的字段需要保持一致。例如,一个 index 下的不同 type 里有两个名字相同的字段,他们的类型(string, date 等等)和配置也必须相同。
  • 只在某个 type 里存在的字段,在其他没有该字段的 type 中也会消耗资源。这是 Lucene Index 带来的常见问题:它不喜欢稀疏。由于连续文档之间的差异太大,稀疏的 posting list 的压缩效率不高。这个问题在 doc value 上更为严重:为了提高速度,doc value 通常会为每个文档预留一个固定大小的空间,以便文档可以被高速检索。这意味着,如果 Lucene 确定它需要一个字节来存储某个数字类型的字段,它同样会给没有这个字段的文档预留一个字节。未来版本的 ES 会在这方面做一些改进,但是我仍然建议你在建模的时候尽量避免稀疏。[1]
  • 得分是由 index 内的统计数据来决定的。也就是说,一个 type 中的文档会影响另一个 type 中的文档的得分。

这意味着,只有同一个 index 的中的 type 都有类似的映射 (mapping) 时,才应该使用 type。否则,使用多个 type 可能比使用多个 index 消耗的资源更多。

1.2 我应该用哪个

这是个困难的问题,它的答案取决于你用的硬件、数据和用例。首先你要明白 type 是有用的,因为它能减少 ES 需要管理的 Lucene Index 的数量。但是也有另外一种方式可以减少这个数量:创建 index 的时候让它的分片少一些。例如,与其在一个 index 里塞上 5 个 type,不如创建 5 个只有一个分片的 index。

在你做决定的时候可以问自己下面几个问题:

  1. 你需要使用父子文档吗?如果需要,只能在一个 index 里建立多个 type。
  2. 你的文档的映射是否相似?如果不相似,使用多个 index。
  3. 如果你的每个 type 都有足够多的文档,Lucene Index 的开销可以被分摊掉,你就可以安全的使用多个 index 了。如果有必要的话,可以把分片数量设小一点。
  4. 如果文档不够多,你可以考虑把文档放进一个 index 里的多个 type 里,甚至放进一个 type 里。

2. 移除映射类型的计划

修改这种模型将会是一个比较大的变化,因此 Elasticsearch 也在尽量少影响用户的前提下,做了一些功能的规划:

ElasticSearch 5.6.0

在索引上设置 index.mapping.single_type: true来启用单个类型单个索引,6.0 版本后会进一步增强
从 5.6.0 版本开始,使用 join 字段来替换 父子关系

Elasticsearch 6.x

5.x 创建的索引在 6.x 版中将继续可以使用
6.x 中将只允许单个类型单个索引, 比较推荐的类型名字为 _doc, 这样可以让索引的API具备相同的路径 PUT {index}/_doc/{id} 和 POST {index}/_doc
_type 字段名称将不再与 _id 字段合并生成 _uid字段, _uid 字段将作为 _id 的别名。
新的索引将不再支持父子关系,应该采用 join 字段类进行替代
_default 映射类型将不推荐使用

Elasticsearch 7.x

URL 中的 type 参数做变为可选。例如,所以文档将不再需要 type。指定 id 的 URL 将变为 PUT {index}/_doc/{id}, 自动生成 id 的 URL 为:POST {index}/_doc
GET | PUT _mapping API 支持查询字符串参数(include_type_name),该参数指示主体是否应包含类型名称。 它默认为 true, 7.x 没有显式类型的索引将使用虚拟类型名称 _doc。

_default 映射类型将被移除

Elasticsearch 8.x

参数 type 在 URL 中将不再被支持
参数include_type_name 默认seize为 false

原文地址:https://www.cnblogs.com/hanks/p/12041514.html

时间: 2024-10-09 03:31:26

ES中index和type区分的相关文章

63.es中的type数据类型

主要知识点 理解es中的type数据类型 一.type的理解 type是一个index中用来区分类似的数据的,但是可能有不同的fields,而且有不同的属性来控制索引建立.分词器.field的value值在底层的lucene中建立索引的时候,全部是opaque bytes类型,不区分类型的.lucene是没有type的概念的,在document中,实际上将type作为一个document的field来存储,即_type,es通过_type来进行type的过滤和筛选.一个index中的多个type

es中对mapping的理解

(1)往es里面直接插入数据,es会自动建立索引,同时建立type以及对应的mapping (2)mapping中就自动定义了每个field的数据类型 (3)不同的数据类型(比如说text和date),可能有的是exact value,有的是full text (4)exact value,在建立倒排索引的时候,分词的时候,是将整个值一起作为一个关键词建立到倒排索引中去:full text,会经历各种各样的处理,分词,normaliztion(时态转换,同义词转换,大小写转换),才会建立到倒排索

Elasticsearch核心技术(2)--- 基本概念(Index、Type、Document、集群、节点、分片及副本、倒排索引)

Elasticsearch核心技术(2)--- 基本概念 这篇博客讲到基本概念包括: Index.Type.Document.集群,节点,分片及副本,倒排索引. 一.Index.Type.Document 1.Index index:索引是文档(Document)的容器,是一类文档的集合. 索引这个词在 ElasticSearch 会有三种意思: 1).索引(名词) 类比传统的关系型数据库领域来说,索引相当于SQL中的一个数据库(Database).索引由其名称(必须为全小写字符)进行标识. 2

1.scrapy爬取的数据保存到es中

先建立es的mapping,也就是建立在es中建立一个空的Index,代码如下:执行后就会在es建lagou 这个index. from datetime import datetime from elasticsearch_dsl import DocType, Date, Nested, Boolean, \ analyzer, InnerDoc, Completion, Keyword, Text, Integer from elasticsearch_dsl.connections im

(转载)Android xml资源文件中@、@android:type、@*、?、@+引用写法含义以及区别

原帖地址:http://blog.csdn.net/zfrong/article/details/7332545 Android xml资源文件中@.@android:type.@*.?.@+引用写法含义以及区别 一[email protected]代表引用资源 1.引用自定义资源.格式:@[package:]type/name android:text="@string/hello" 2.引用系统资源.格式:@android:type/name android:textColor=&

Android xml资源文件中@、@android:type、@*、?、@+含义和区别

一[email protected]代表引用资源 1.引用自定义资源.格式:@[package:]type/name android:text="@string/hello" 2.引用系统资源.格式:@android:type/name android:textColor="@android:color/opaque_red" 注意:其实@android:type/name是@[package:]type/name 的一个子类 二[email protected]*

[ jquery 效果 show([speed,[easing],[fn]]) hide([speed,[easing],[fn]]) ] 此方法用于显示隐藏的被选元素:show() 适用于通过 jQuery 方法和 CSS 中 display:none type='hidden' 隐藏的元素(不适用于通过 visibility:hidden 隐藏的元素)

show()显示隐藏的被选元素:show() 适用于通过 jQuery 方法和 CSS 中 display:none type='hidden' 隐藏的元素(不适用于通过 visibility:hidden 隐藏的元素): hide() 方法隐藏被选元素: 参数 描述 speed 可选.规定显示效果的速度. 可能的值: 毫秒 "slow" "fast" easing 可选.规定在动画的不同点上元素的速度.默认值为 "swing". 可能的值: &

CI框架 .htaccess 隐藏url中index.php的解决

CodeIgniter(以下简称"CI")是一款国外优秀的PHP轻量级MVC框架,它支持PHP4和PHP5,是开发中小型可拓展性需求高的Web应用程序的利器.目前你所见到的这个博客程序,正是采用CI进行的编写. 秉承MVC架构的思想,CI中的所有控制器都需要经过单点入口文件index.php(默认)来加载调用.也就是说,在默认情况下,所有CI开发项目的URL都形如以下这种形式: http://localhost/index.php/blog/logs/this_is_a_test_en

Javascript --扩展String实现替换字符串中index处字符

String.prototype.replaceCharAt = function(n,c){ return this.substr(0, n)+ c + this.substr(n+1,this.length-1-n); } Javascript --扩展String实现替换字符串中index处字符