映射
Elasticsearch中的mapping(映射)对应数据库中的表结构
GET /gb/_mapping/tweet
返回:
{ "gb": { "mappings": { "tweet": { "properties": { "date": { "type": "date", "format": "dateOptionalTime" }, "name": { "type": "string" }, "tweet": { "type": "string" }, "user_id": { "type": "long" } } } } } }
Elasticsearch核心简单字段类型:
类型 | 表示的数据类型 |
String | string |
Whole number | byte, short, integer, long |
Floating point | float, double |
Boolean | boolean |
Date | date |
当你索引一个包含新字段的文档——一个之前没有的字段——Elasticsearch将使用动态映射猜测字段类型,这类型来自于JSON的基本数据类型,使用以下规则:
JSON type | Field type |
Boolean: true or false | boolean |
Whole number: 123 | boolean |
Floating point: 123.45 | double |
String, valid date: "2014-09-15" | date |
String: "foo bar" | string |
注意:这意味着,如果你索引一个带引号的数字——"123",它将被映射为"string"类型,而不是"long"类型。然而,如果字段已经被映射为"long"类型,Elasticsearch将尝试转换字符串为long,并在转换失败时会抛出异常。
使用技巧:我们可以先同步一条数据让ES自动生成映射,然后复制出来修改部分字段后手动创建映射
定义字段映射规则
前面说到,在同步一个新的字段时,ES会自动生成映射,但有时候默认的映射并不能满足我们的需求,幸运的是我们可以通过设置来自定义这些规则。
比如你不希望把"2014-09-15"的字段映射成date类型,可以使用:
"mappings": { "my_type": { "date_detection": false } }
你也可以修改日期格式的映射规则,如:
"mappings": { "_default_": { "_all": {"enabled": false}, "dynamic_date_formats": ["yyyy-MM-dd HH:mm:ss"] } }
此时只有当字符串格式为"yyyy-MM-dd HH:mm:ss"才会被自动识别为日期类型,并且format就是被识别的格式.
使用 dynamic_templates,你可以完全控制新字段的映射,你设置可以通过字段名或数据类型应用一个完全不同的映射。
PUT /my_index { "mappings": { "my_type": { "dynamic_templates": [ { "en": { "match": "*_en", "match_mapping_type": "string", "mapping": { "type": "string", "analyzer": "english" } }}, { "not_analyzed": { "match": "*", "match_mapping_type": "string", "mapping": { "type": "string", "index": "not_analyzed" } }} ] } } }
上面的dynamic_templates实现了将以"_en"结尾且类型为string的字段映射为使用“english”分析器的类型,其余的映射为不索引字段
倒排索引
在了解分析的概念前,先要简单了解一下什么是倒排索引
倒排索引(inverted index)的结构是ES用来做快速的全文搜索的。倒排索引由在文档中出现的唯一的单词列表,以及对于每个单词在文档中的位置组成。
例如,我们有两个文档,每个文档content字段包含:
dog cat bird
dog girl boy
把它放到倒排索引中的结果如下:
term | Doc_1 | Doc_2 |
dog | X | X |
cat | X | |
bird | X | |
girl | X | |
boy | X |
当需要查找dog bird时,只需要在索引中查找,如下:
term | Doc_1 | Doc_2 |
dog | X | X |
bird | X | |
total | 2 | 1 |
两个文档都匹配,但是第一个比第二个有更多的匹配项。以此就可以轻易的看到Doc_1的匹配度高于Doc_2的匹配度
当然实际应用中要复杂的多,比如索引中还会保存字符出现的次数和出现的位置,一个长度长的词还会比一个短的词在匹配度计算时占更高的分值等。
实际应用场景中我们还会遇到一些问题:
- 大小写不敏感
- 近义词、复数
- 中文如何进行分词
下面会继续讲解对这些情况处理
分析
分析(analysis)是这样一个过程:
- 首先,标记化一个文本块为适用于倒排索引单独的词(term)
- 然后标准化这些词为标准形式,提高它们的“可搜索性”或“查全率”
分析的过程如下图:
- 字符过滤器(character filter):首先字符串经过字符过滤器,它们的工作是在标记化前处理字符串。字符过滤器能够去除HTML标记,或者转换"&"为"and"。
- 分词器(tokenizer):分词器被标记化成独立的词。一个简单的分词器(tokenizer)可以根据空格或逗号将单词分开(这个在中文中不适用)。
- 标记过滤(token filters):标记过滤可以修改词(例如将"Quick"转为小写),去掉词(例如停用词像"a"、"and"、"the"等等),或者增加词(例如同义词像"jump"和"leap")
由上面的图可以看出:Analyzer(分析器)由Tokenizer(分词器)和Filter(过滤器)组成。
常用的分析器有:
- standard analyzer:标准分析器
- simple analyzer:简单分析器,包含lower case tokenizer
- language analyzers:各语言的分词器
- 自定义分词器:可以指定一个tokenizer,0个、1个或多个Filter
在mapping中指定分析器
{ "field1" : { "type" : "string", "analyzer" : "string_lowercase" } }
指定默认的分析器
{ "field1" : { "type" : "string" } }
不使用分析器
{ "field1" : { "type" : "string", "index" : "not_analyzed" } }
参考文档:
https://my.oschina.net/xiaohui249/blog/260993
https://es.xiaoleilu.com/052_Mapping_Analysis/40_Analysis.html
相关推荐
对吉达女子中学本地化的研究表明,学校地图既是学校政策的诊断工具又是透视工具。 它也是用于研究,测量可及性并因此帮助教育部门(教育部,区域教育局等)的决策者的工具,只要它可以可视化教育设施的情况即可。...
### Linux下文件映射实现分析 #### 前言 在深入探讨Linux内核中文件映射的实现之前,我们先简要回顾一下文件映射的基本概念及其在Linux环境下的重要性。文件映射,简单来说,就是将一个或多个文件的全部或部分虚拟...
此外,MFC引入了一种创新的消息映射和命令传递机制,简化了消息处理。 **SDK下的消息机制** 在SDK(Software Development Kit)环境下,Windows程序是基于消息驱动的。操作系统捕获外部事件并转化为消息,这些消息...
地址映射原理与举例分析 本文将详细介绍地址映射原理,并通过 Intel CPU 的发展历程来分析地址映射的演进过程。 一、段式管理 Intel 的 CPU,从 8086 开始,采用段页式管理的原始思想。8086 是“实地址模式”,...
Linux 内存映射实例分析 ...在 ARM 平台上,Linux 内核虚拟地址空间的映射规划和实际物理地址的映射关系是非常复杂的,因此需要深入分析和理解 Linux 内存管理机制,以便更好地优化操作系统的性能。
庞加莱映射,全名Poincaré Map,是由法国数学家亨利·庞加莱提出的一种在动力系统理论中用于分析复杂运动规律的方法。庞加莱是现代拓扑学和混沌理论的奠基人之一,他的这项工作对天体力学、物理学以及后来的混沌...
《Linux内核地址映射机制分析及实现》这篇论文深入探讨了Linux操作系统内核中的地址映射机制,这是操作系统核心功能的重要组成部分,确保了程序的正确执行和内存的有效管理。地址映射允许逻辑地址(程序中的地址)与...
是一个参数分析和平台。它是如何工作的用户断言要讨论,支持,证明或反驳的争用,并在前提条件下使用因为,但或但在一起的说法而争论。好处批判性思维是从知识,纪律出发的过程,该过程将主动,熟练地概念化,应用,...
压缩映射原理是泛函分析中的一个核心概念,对于理解和解决许多问题至关重要。 首先,我们要理解压缩映射的定义。在度量空间 (X, ρ) 中,如果有一个映射 T: X → X 满足对任意不同的 x, y ∈ X,都有 ρ(Tx, Ty) ρ...
矩阵分析 史荣昌,线性空间和线性映射 第一节 线性空间 第二节 线性空间的基底,维数与坐标变换 第三节 线性空间的子空间 第四节:线性映射 第五节、线性映射的值域、核 第六节:线性变换的矩阵与线性变换的...
这些代码可能用于分析三次映射的周期性、分岔和混沌行为,如"Cubic_Wave.m"和"Cubic_period.m"。 最后,"combine_total.m"可能是将所有这些映射的结果组合在一起,生成一个综合的展示或分析,而"total.m"可能是整个...
### 模型驱动体系结构(MDA)及其映射规则原理分析 #### 一、MDA的概念与背景 模型驱动体系结构(Model Driven Architecture,MDA)是OMG(Object Management Group)于2001年提出的一种软件开发方法论,其核心...
一种基于猫映射和伯努利移位映射的图像加密算法是一种利用混沌理论来确保图像数据安全的技术。混沌映射在密码学中被广泛应用,因其产生的序列具有伪随机性和高度敏感性,非常适合用于置乱和扩散过程。该算法特别针对...
文章【分段Logistic混沌映射及其性能分析】中,作者分析了Tent映射和分段Tent映射在计算机有限精度下的性能。Tent映射是另一种一维混沌映射,其形式为线性的分段函数,具有简单但强烈的混沌特性。Tent映射与Logistic...
此外,这种映射也应用于其他领域,如经济学、社会学、计算机科学和工程学,用来模拟和分析复杂系统的动态行为。 在编程和数据分析中,`Main_Logistic.m` 文件很可能是用MATLAB编写的一个程序,用于可视化Logistic...
马里科帕政府协会(MAG)的地图主页是MAG的交互式地图和分析站点的门户。 这个JavaScript网页是由MAG员工为MAG成员机构和公众开发的。 关键字词 planning regional Maricopa County Pinal County State Arizona ...
《游戏的3D映射原理分析》一文深入探讨了3D游戏开发中核心的3D映射原理,这是将三维空间中的游戏场景转化为玩家在二维屏幕上的视觉体验的关键技术。文章作者ham通过个人推导的方式,清晰地阐述了3D坐标数据如何映射...
**深入分析 iBATIS 框架之系统架构与映射原理** iBATIS 是一个优秀的持久层框架,它允许开发者将 SQL 语句与 Java 代码分离,从而简化了数据库访问层的开发工作。本篇文章将深入探讨 iBATIS 的核心系统架构以及其...
在MATLAB中,可以使用for循环和条件判断来实现这个映射,然后同样用scatter函数展示结果。 总的来说,MATLAB为Duffing方程的分析提供了强大的工具集,包括求解非线性动力学方程、绘制时间历程图、生成相图以及...