黑龙江建设厅网官网,网站建设小程序开发seo推广,wordpress返回,wordpress怎么调用api在 Elasticsearch 7.0.0 或更高版本中创建的索引不再接受 _default_ 映射。 在 6.x 中创建的索引将继续在 Elasticsearch 6.x 中像以前一样运行。 7.0 中的 API 中已弃用类型 type#xff0c;并对索引创建、放置映射、获取映射、放置模板、获取模板和获取字段映射 API 进行了重…
在 Elasticsearch 7.0.0 或更高版本中创建的索引不再接受 _default_ 映射。 在 6.x 中创建的索引将继续在 Elasticsearch 6.x 中像以前一样运行。 7.0 中的 API 中已弃用类型 type并对索引创建、放置映射、获取映射、放置模板、获取模板和获取字段映射 API 进行了重大更改。 什么是映射类型
我们知道 Elasticsearch 是一个文档数据库映射类型 type 表示被索引的文档或实体的类型例如 youtube 索引可能具有用户类型和视频类型。你可以粗俗地理解 type 为关系数据库中的表格 table。
每个映射类型都可以有自己的字段因此用户 user 类型可能有一个 full_name 字段、一个 user_name 字段和一个电子邮件字段而视频 video 类型可以有一个 video_url 字段、一个 uploaded_at 字段以及像用户 user 类型一样的 user_name 字段。
每个文档都有一个包含类型名称的 _type 元数据字段并且可以通过在 URL 中指定类型名称将搜索限制为一种或多种类型
GET youtube/user,video/_search
{query: {match: {user_name: kimchy}}
}
文档的 _type 和 _id 字段组合生成 _uid 字段有助于唯一标识存储在同一索引中具有相同 _id 的记录和文档。
下面的代码片段显示了不同类型的文档如何先前存储在同一索引中请注意下面代码仅适用于于 7.0.0 之前的版本
PUT youtube
{mappings: {user: {properties: {name: { type: text },user_name: { type: keyword },email: { type: keyword }}},video: {properties: {video_url: { type: text },user_name: { type: keyword },uploaded_at: { type: date }}}}
}
上面的代码为 youtube 索引创建了一个映射它有两种类型user 和 video。
PUT youtube/user/debraj
{name: Debraj Bhal,user_name: debraj,email: debrajbhalgmail.com
}PUT youtube/video/1
{user_name: debraj,uploaded_at: 2017-10-24T09:00:00Z,video_url: https://myvideo.com
}
上面的代码片段用于分别创建/更新 _id debraj 类型的 user 和 _id 1 类型的 video 的文档。
可以通过使用请求 URL 中的类型名称来检索特定类型的这些文档如下面的代码片段所示
GET youtube/video/_search
{query: {match: {user_name: debraj}}
} 尽管映射类型 type 提供了如此出色的功能但为什么它们被删除了
在 Elasticsearch 中索引类似于 SQL 数据库类型类似于表。 但这个类比并不完全正确。 因为在 SQL 数据库中表是相互独立的即不同表中同名的字段是完全独立的互不依赖。
但在 Elasticsearch 索引中不同映射类型中具有相同名称的字段在内部由相同的 Lucene 字段支持。 换句话说使用上面的示例用户类型中的 user_name 字段与视频类型中的 user_name 字段存储在完全相同的字段中并且两个 user_name 字段在两种类型中必须具有相同的映射定义也即相同的数据类型。
例如当你想要定义 deleted 字段在同一索引中一种类型定义为 date 字段而在另一种类型中定义为 bool 字段时这可能会导致失败。
此外如果类型很少或没有共同字段如果存储在同一索引中会导致数据稀疏并干扰 Lucene 有效压缩文档的能力。 例如在上面的示例中只有 username 字段是常见的因此对于视频类型电子邮件和姓名类型字段没有用处因此导致数据稀疏。 映射类型的替代方案
尽管映射类型存在一些缺点但它们有助于组织链接数据。 因此即使在 Elasticsearch 中删除映射类型之后我们仍然可以通过两种方式实现类似的功能 每个文档类型的索引
第一种选择是为每个文档类型建立一个索引。 你可以将视频存储在视频 video 索引中将用户存储在 user 索引中而不是将视频和用户存储在单个 youtube 索引中。 自定义类型字段
当然集群中可以存在的主分片数量是有限的因此你可能不希望为了仅包含几千个文档的集合而浪费整个分片。 在这种情况下你可以实现自己的自定义类型字段其工作方式与旧的 _type 类似。
PUT youtube
{mappings: {_doc: {properties: {type: { type: keyword }, name: { type: text },user_name: { type: keyword },email: { type: keyword },video_url: { type: text },uploaded_at: { type: date }}}}
}
在文档的映射定义中我们添加了额外的字段 type。 该字段用于区分存储在同一索引中的不同类型的文档。 我们可以更新和查询这些文档如下面的代码片段所示。
PUT youtube/_doc/user-debraj
{type: user, name: Debraj Bhal,user_name: debraj,email: debrajbhalgmail.com
}PUT youtube/_doc/video-1
{type: video, user_name: debraj,uploaded_at: 2017-10-24T09:00:00Z,video_url: https://myvideo.com
}GET youtube/_search
{query: {bool: {must: {match: {user_name: debraj}},filter: {match: {type: video }}}}
}
希望本文能帮助你详细了解 Elasticsearch 中的映射类型。