介绍elasticsearch中Mapping

2024-08-27 16:18

本文主要是介绍介绍elasticsearch中Mapping,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这篇文件介绍elasticsearch中mapping特性。我们会定义其关键术语,并进一步介绍mapping是什么,什么时候指定它,其结构是怎样的以及如何应用到我们的数据中。

Schema是什么

schema翻译为模式
mapping 翻译为映射

模式是一个或多个字段的描述,描述文档的类型以及如何处理文档的不同字段。

elasticsearchschema就是mapping,其用于描述在json文档中的字段和数据类型,以及它们在Lucene索引中如何进行索引。因此,在elasticsearch术语中,我们通常将该模式称为映射

在概念上,elasticsearch服务器包含零个或多个索引。一个索引包含零个或多个类型,其类型又包含零个或多个文档。换句话说:一个文档有一个标识,会属于一个类型,其又会属于一个索引。下图显示在索引my_index中,my_type类型中的文档ABXY.

Indexes,types and documents

上图将类型名为another_type和索引名为another显示出来是为了强调elasticsearch多库的,其意味着我们可以在单个服务器上存储多个索引和多个类型。

elasticsearch文档和相关资料中,我们常常看到术语mapping type, 其通常表示在索引内的type名称,例如上图中的my_typeanother_type
当我们在elasticsearch中说到类型,其通常是类型的定义。不要和每个mapping中的type关键字混淆了,该关键字决定了文档中的数据如何由elasticsearch来处理。

什么时候使用自定义的映射

elasticsearch具有无模式的能力,这意味着文档在没有明确提供模式下也能被索引。

如果你不指定映射,则在索引期间检测到文档中的新字段时,elasticsearch将默认会动态生成一个动态映射。然而,这个动态生成的映射需要注意:

  1. 检测到的类型可能不正确
  2. 可能会导致不必要的重复。(特别是_source_all字段)。
  3. 对于索引和搜索会使用默认的分词器和设置。

例如:时间戳在json中常常表示为long,但是elasticsearch可能不能将其检测为date字段,从而阻止了date过滤器和facetsthe date histogram facet)正常工作。

明确指定模式,我们可以避免上述的问题。

映射看起了像什么?

映射通常作为json提供给elasticsearch,是一种分层结构格式,root是映射应用的类型名称。

Mapping Root

在映射root级别,在类型名称下,elasticsearch支持几个特殊字段来配置如何处理不是要发布文档部分的元数据,例如:其typeidsizefallback _all field。有关支持的特殊字段的列表,请参阅Mapping Reference右侧列表中的fields

root 对象还可以有其他额外的属性,它可以为类型设置默认索引和搜索分析器,在类型中的日期会自动解析为日期的格式以及动态模板 - 我们将在以后的文章中重新讨论这些属性。除了上述领域,嵌套json文档的root基本和其他映射基本之间没有区别。

Hierarchical Levels 层次级别

每个层次通常定义一个properties设置,对层次中的文档的key进行映射。这个结构是分层的,意味着每个级别下的叶子节点可能包括其子值的properties设置。为了更好理解,思考下面的文档和其映射:
Document:

{"name": {"first": "John"}
}

Mapping:

{"my_type" : {"properties" : {"name" : {"properties" : {"first" : { "type" : "string" } }}}}
}

虽然映射比文档稍微复杂点,映射的结果清晰的遵循文档的结构,并添加了properties节点。

上面层次:
第一层:key为name这层,归属type
第二层:key为first这层,归属第一层。
所以在设置映射关系时,第一层是被my_type包裹着,第二层是被name这层包裹着,其中它们都是要用properties字段包裹着,表示设置的映射关系。

The type Key

在上面的例子中,我们看到文档字段name.first与其他结构的区别在于它定义了一个type。在叶子层次中使用的type键是为了告诉elasticsearch在文档给定(相同)的层次中如何处理该字段。如果type键被省略, 如非叶子层次类型情况,elasticsearch会假设其为object(对象)类型。

string类型是内置的核心类型之一,elasticsearch支持许多不同的类型,例如:geo_pointip,其可以分别用于有效索引和搜索地理位置和IPv4地址。使用multi_field类型,我们甚至可以将单个文档字段索引到多个虚拟字段中。我们将在未来的文章中详细说明。

如何提供Mapping

这里有两种方式来提供mappingelasticsearch
最常见的方式是在创建索引时:

curl -XPOST ...:9200/my_index -d '{"settings" : {# .. index settings},"mappings" : {"my_type" : {# mapping for my_type}}
}'

另一种方式是使用Put Mapping API

$ curl -XPUT 'http://localhost:9200/my_index/my_type/_mapping' -d '
{"my_type" : {# mapping for my_type}
}
'

注意:该类型(my_type)在请求路径和请求体中是相同的。
API使我们能够更新现有索引的映射,但是存在潜在的冲突和一些限制。新定义的映射可以添加到现有映射中,并且已有的类型可能会更新他们的配置,但是改变类型将会发生冲突并且是不可接受的。然而可以通过将ignore_conflicts=true作为参数传递给Mapping API,但这样做不能保证产生预期的结果,因为已经索引的文档在使用新映射时不会自动重新索引(类似于插入操作)文档。

因此,在大多数情况下,建议使用Put Mapping API在创建索引时,指定映射。

结束语

现在介绍在elasticsearch模式/映射,并且展示了数据类型层次定义是如何映射的。在后续文章中,我将会更详细讲解关于a workflow I use when I explore new datasets with Elasticsearch.

参考地址:
https://www.elastic.co/blog/found-elasticsearch-mapping-introduction

这篇关于介绍elasticsearch中Mapping的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112166

相关文章

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)

《MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)》掌握多表联查(INNERJOIN,LEFTJOIN,RIGHTJOIN,FULLJOIN)和子查询(标量、列、行、表子查询、相关/非相关、... 目录第一部分:多表联查 (JOIN Operations)1. 连接的类型 (JOIN Types)

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.

Pytorch介绍与安装过程

《Pytorch介绍与安装过程》PyTorch因其直观的设计、卓越的灵活性以及强大的动态计算图功能,迅速在学术界和工业界获得了广泛认可,成为当前深度学习研究和开发的主流工具之一,本文给大家介绍Pyto... 目录1、Pytorch介绍1.1、核心理念1.2、核心组件与功能1.3、适用场景与优势总结1.4、优

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe