《Elasticsearch技术解析与实战》读书笔记

第一章 ES入门

倒排索引:
一般表示为一个关键词,然后是它的频度、位置等信息

Lucene将上面三列分别作为词典文件(Term Dictionary)、频率文件(frequencies)、位置文件(positions)保存

概念

Term:索引词,一个能够被索引的精确值
Text:一段普通的非结构化文字
Analysis:将文本转换为索引词的过程,分析的结果依赖于分词器

Index:具有相同结构的文档集合
Type:在索引中,可以定义一个或多个类型,类型是索引的逻辑分区
Document:存储在ES中的一个JSON格式的字符串。类似于关系数据库中表的一行。每个存储在索引中的一个文档都有一个类型和一个ID。原始的JSON文档被存储在一个叫作_source的字段中。
Mapping:类似于关系数据库中的表结构,每一个索引都有一个映射,定义索引中每一个字段类型,以及一个索引范围内的设置。一个映射可以事先被定义,或在第一次存储文档时自动识别。
Field:文档中包含零个或者多个字段,字段可以是一个简单类型,也可以是一个数组或对象的嵌套结构。类似于关系数据库中表的列。每个字段都对应一个字段类型。字段还可以指定如何分析该字段的值。
source field:默认情况下,你的原文档将被存储在_source这个字段中,当你查询的时候也是返回这个字段。这允许你可以从搜索结果中访问原始的对象,这个对象返回一个精确的JSON字符串,这个对象不显示索引分析后的其他任何数据

Cluster:
Node:
Routing:

第二章 索引

创建索引时可以通过修改number_of_shardsnumber_of_replicas参数的数量来修改分片和副本的数量。分片默认是5个,副本默认是1个。

更新索引副本数:update-index-settings

删除索引:delete,为了防止误删除,设置elasticsearch.yml属性action.destructive_requires_name=true,禁止使用通配符或_all删除索引,必须使用名称或别名。

打开/关闭索引:POST 127.0.0.1:9200/book/_close,关闭的索引只能显示索引元数据信息,不能进行读写操作。关闭的索引会继续占用磁盘空间但不能使用,所以关闭索引接口可能造成磁盘空间浪费。禁止使用关闭索引功能,可设置settingscluster.indices.close.enable=false,默认是true。

如果指向不存在的索引会抛出错误。配置ignore_unavailable=true不显示异常。

HEAD:判断类型是否存在

索引别名

类似于数据库视图,只能增加或删除,一个别名可以关联多个索引,使用通配符模式为索引增加别名时,只对现有的索引有效,新增的索引不适用于通配符模式。

索引模板

索引模板就是创建好一个索引参数设置(settings)和映射(mapping)的模板,在创建新索引时指定模板名称就可以使用模板定义好的参数设置和映射。

模板匹配
存在template_1、template_2两个模板,使用te*会匹配2个模板,最后合并两个模板的配置。如果配置重复,这时应该设置order属性,order是从0开始的数字,先匹配order数字小的,再匹配数字大的,如果有相同的属性配置,后匹配的会覆盖之前的配置。

重建索引

拷贝文件从一个索引到另一个索引。

在接口参数中可以增加dest来进行乐观并发控制。
version_type:

  • internal会导致ES盲目转储文件到目标索引,任何具有相同类型和ID的文档将被重写
  • external将会导致Elasticsearch保护源索引的版本,如果在目标索引中有一个比源索引旧的版本,则会更新文档。对于源文件中丢失的文档在目标中也会被创建

设置op_type为create将导致_reindex在目标索引中仅创建丢失的文件。所有现有的文件将导致版本冲突。

参数:

  • pretty
  • refresh:会导致所有写入请求的索引被刷新。与索引接口中的refresh参数不同,只有接收到新数据的分片会进行刷新
  • wait_for_completion:设置为false时,ES将进行执行前检查后启动请求,然后返回一个task可用于任务API取消或得到任务的状态,现在一旦请求完成任务就不见了,找任务的最终结果的唯一地方是在ES日志文件中
  • consistency:控制每次写请求必须多少份分片被响应
  • timeout:控制每个写请求等待可用的分片的时间

查看任务:
GET http://127.0.0.1:9200/_tasks/?pretty&detailed=true&actions=*reindex

索引监控

索引统计
GET http://127.0.0.1:9200/_stats
GET http://127.0.0.1:9200/index1,index2/_stats

统计数据选项

指定统计数据说明
docs
store索引大小
indexing
get获取
search
completion
fielddata
flush
merge
request_cache
refresh
suggest
translog

索引分片

索引恢复

映射

映射是定义存储和索引的文档类型以及字段的过程。索引中的每一个文档都有一个类型,每种类型都有它自己的映射。一个映射定义文档结构内每个字段的数据类型。映射通过配置来定义字段类型与该类型相关联的元数据的关系。例如,可以通过映射来定义日期类型的格式、数字类型的格式或者文档中所有字段的值是否应该被_all字段索引等。

元字段

每个文档都有与之关联的元数据,元字段是为了保证系统正常运转的内置字段。

_all:特殊的包含全部内容的字段,在一个大字符串中关联所有其他字段的值,使用空格作为分隔符。可以被分析和索引但不会被存储。使用_all字段可以对文档的值进行搜索而不必知道包含所需值的字段名。字符串类型字段。

关联字段值时,丢失短字段(高相关性)和长字段(低相关性)之间的区别。当相关性是重要搜索条件时,应该明确指出查询字段。_all字段的使用需要额外的处理器周期,并耗费更多的磁盘空间。如果不需要的话,可以完全禁用或在每个字段的基础上自定义。

_field_names:索引文档中所有包含非空值的字段名称。用于存在查询和缺失查询的情况下,查找指定字段拥有非空值的文档是否存在。_field_name字段的值可以用于查询、聚合以及脚本:

_id:没有索引,它的值可以从_uid字段自动生成。字段的值可以在查询以及脚本中访问,但是在聚合或者排序时,要使用_uid而不能用_id

_uid_type#_id,两个字段的组合。

_size_source元字段占用的字节数,通过mapper-size插件提供,

_index:虚拟字段,不作为一个真实的字段添加到Lucene索引中。这意味着可以在term或terms查询(或任何重写term查询的查询,如match、query_string或simple_query_string)中使用_index字段,但是不支持prefix、wildcard、regexp或fuzzy查询

_meta:字段

_parent:在同一个索引中通过创建映射类型可以在文档间建立父子关系。父类型和子类型必须是不同的,即父子关系不能建立在相同类型的文档之间。_parent的type设置只能指向一个当前不存在的类型。这意味着一个类型被创建之后就无法成为父类型。

父子文档必须索引在相同的分片上。parent编号用于作为子文档的路由值,确保子文档被索引到父文档所在的分片中。这意味着当获取、删除或更新子文档的时候,需要提供相同的parent值。

_routing:文档在索引中利用下面的公式路由到特定的分片:shard_num=hash(_routing)%num_primary_shards
_routing字段的默认值使用的是文档的_id字段。如果存在父文档,则使用文档的_parent编号。

_source:字段包含索引时原始的JSON文档内容,字段本身不建立索引(无法搜索)会被存储,所以当执行获取请求的时候可以返回_source字段。虽然很方便,但是_source字段确实会对索引产生存储开销。因此,可以禁用_source字段。

但是,_source字段被禁用,会造成大量的功能无法使用:

  • 更新接口
  • 高亮显示
  • 重建索引,不论是修改映射或分析,还是升级索引到一个新版本
  • 通过查看索引时的原始文档对查询或聚合进行调试
  • 自动修复索引
  • _source字段中移除内容相当于精简版的禁用功能,尤其是无法重建文档索引

_type:增加此字段,通过类型名加快搜索进度。

映射参数

analyzer

boost

对一个字段进行加权,默认的相关性计算需要考虑字段长度,因此短字段会有一个更高的加权。

索引时最好不要进行加权,主要有这几个原因:

  • 除非重索引所有的文档,索引加权值不会发生改变
  • 每个查询都支持查询加权,会产生同样的效果。不同的地方在于不需要重索引就可以调整加权值
  • 索引加权值作为norm的一部分,只有一个字节。这降低了字段长度归一化因子的分辨率,会导致低质量的相关性计算。

索引加权的唯一优势在于作用于_all字段。当查询_all字段时,短字段的词比长字段的词有更高的分数。这个功能是以计算成本为代价的:当索引加权被使用时,查询_all字段会变得更加缓慢。

coerce

同一个索引中相同名称的字段可以拥有不同的coerce设置。可以利用PUT映射接口来更新已存在字段的coerce值。

全局设置:index.mapping.coerce设置可以在索引级别上对所有映射类型整体禁用强制类型转换:

number_one字段继承索引级别的强制类型转换设置,number_two字段覆盖索引级别的设置来启用强制类型转换。

第四章

第五章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
前言 第1章 Elasticsearch入门 1 1.1 Elasticsearch是什么 1 1.1.1 Elasticsearch的历史 2 1.1.2 相关产品 3 1.2 全文搜索 3 1.2.1 Lucene介绍 4 1.2.2 Lucene倒排索引 4 1.3 基础知识 6 1.3.1 Elasticsearch术语及概念 6 1.3.2 JSON介绍 10 1.4 安装配置 12 1.4.1 安装Java 12 1.4.2 安装Elasticsearch 12 1.4.3 配置 13 1.4.4 运行 15 1.4.5 停止 17 1.4.6 作为服务 17 1.4.7 版本升级 19 1.5 对外接口 21 1.5.1 API约定 22 1.5 .2 REST介绍 25 1.5.3 Head插件安装 26 1.5.4 创建库 27 1.5.5 插入数据 28 1.5.6 修改文档 28 1.5.7 查询文档 29 1.5.8 删除文档 29 1.5.9 删除库 30 1.6 Java接口 30 1.6.1 Java接口说明 30 1.6.2 创建索引文档 33 1.6.3 增加文档 34 1.6.4 修改文档 35 1.6.5 查询文档 35 1.6.6 删除文档 35 1.7 小结 36 第2章 索引 37 2.1 索引管理 37 2.1.1 创建索引 37 2.1.2 删除索引 39 2.1.3 获取索引 39 2.1.4 打开/关闭索引 40 2.2 索引映射管理 41 2.2.1 增加映射 41 2.2.2 获取映射 44 2.2.3 获取字段映射 45 2.2.4 判断类型是否存在 46 2.3 索引别名 46 2.4 索引配置 51 2.4.1 更新索引配置 51 2.4.2 获取配置 52 2.4.3 索引分析 52 2.4.4 索引模板 54 2.4.5 复制配置 55 2.4.6 重建索引 56 2.5 索引监控 60 2.5.1 索引统计 60 2.5.2 索引分片 62 2.5.3 索引恢复 63 2.5.4 索引分片存储 64 2.6 状态管理 64 2.6.1 清除缓存 64 2.6.2 索引刷新 64 2.6.3 冲洗 65 2.6.4 合并索引 65 2.7 文档管理 66 2.7.1 增加文档 66 2.7.2 更新删除文档 69 2.7.3 查询文档 73 2.7.4 多文档操作 76 2.7.5 索引词频率 80 2.7.6 查询更新接口 83 2.8 小结 87 第3章 映射 88 3.1 概念 88 3.2 字段数据类型 90 3.2.1 核心数据类型 91 3.2.2 复杂数据类型 96 3.2.3 地理数据类型 100 3.2.4 专门数据类型 106 3.3 元字段 108 3.3.1 _all字段 109 3.3.2 _field_names字段 109 3.3.3 _id字段 110 3.3.4 _index字段 110 3.3.5 _meta字段 111 3.3.6 _parent字段 111 3.3.7 _routing字段 112 3.3.8 _source字段 114 3.3.9 _type字段 115 3.3.10 _uid字段 115 3.4 映射参数 116 3.4.1 analyzer参数 116 3.4.2 boost参数 118 3.4.3 coerce参数 119 3.4.4 copy_to参数 120 3.4.5 doc_values参数 121 3.4.6 dynamic参数 122 3.4.7 enabled参数 122 3.4.8 fielddata参数 123 3.4.9 format参数 126 3.4.10 geohash参数 128 3.4.11 geohash_precision参数 129 3.4.12 geohash_prefix参数 130 3.4.13 ignore_above参数 131 3.4.14 ignore_malformed参数 131 3.4.15 include_in_all参数 132 3.4.16 index参数 133 3.4.17 index_options参数 133 3.4.18 lat_lon参数 134 3.4.19 fields参数 135 3.4.20 norms参数 136 3.4.21 null_value参数 137 3.4.22 position_increment_gap参数 137 3.4.23 precision_step参数 138 3.4.24 properties参数 138 3.4.25 search_analyzer参数 139 3.4.26 similarity参数 140 3.4.27 store参数 141 3.4.28 term_vector参数 141 3.5 动态映射 142 3.5.1 概念 142 3.5.2 _default_映射 143 3.5.3 动态字段映射 143 3.5.4 动态模板 145 3.5.5 重写默认模板 148 3.6 小结 148 第4章 搜索 149 4.1 深入搜索 149 4.1.1 搜索方式 149 4.1.2 重新评分 153 4.1.3 滚动查询请求 155 4.1.4 隐藏内容查询 158 4.1.5 搜索相关函数 161 4.1.6 搜索模板 164 4.2 查询DSL 167 4.2.1 查询和过滤的区别 167 4.2.2 全文搜索 168 4.2.3 字段查询 179 4.2.4 复合查询 183 4.2.5 连接查询 188 4.2.6 地理查询 190 4.2.7 跨度查询 197 4.2.8 高亮显示 200 4.3 简化查询 203 4.4 小结 206 第5章 聚合 207 5.1 聚合的分类 207 5.2 度量聚合 209 5.2.1 平均值聚合 209 5.2.2 基数聚合 211 5.2.3 最大值聚合 213 5.2.4 最小值聚合 214 5.2.5 和聚合 214 5.2.6 值计数聚合 215 5.2.7 统计聚合 215 5.2.8 百分比聚合 215 5.2.9 百分比分级聚合 216 5.2.10 最高命中排行聚合 217 5.2.11 脚本度量聚合 217 5.2.12 地理边界聚合 221 5.2.13 地理重心聚合 222 5.3 分组聚合 223 5.3.1 子聚合 224 5.3.2 直方图聚合 226 5.3.3 日期直方图聚合 230 5.3.4 时间范围聚合 233 5.3.5 范围聚合 234 5.3.6 过滤聚合 235 5.3.7 多重过滤聚合 236 5.3.8 空值聚合 238 5.3.9 嵌套聚合 239 5.3.10 采样聚合 240 5.3.11 重要索引词聚合 242 5.3.12 索引词聚合 245 5.3.13 总体聚合 251 5.3.14 地理点距离聚合 251 5.3.15 地理散列网格聚合 253 5.3.16 IPv4范围聚合 255 5.4 管道聚合 257 5.4.1 平均分组聚合 259 5.4.2 移动平均聚合 261 5.4.3 总和分组聚合 262 5.4.4 总和累计聚合 262 5.4.5 最大分组聚合 264 5.4.6 最小分组聚合 265 5.4.7 统计分组聚合 266 5.4.8 百分位分组聚合 268 5.4.9 差值聚合 269 5.4.10 分组脚本聚合 273 5.4.11 串行差分聚合 275 5.4.12 分组选择器聚合 276 5.5 小结 277 第6章 集群管理 278 6.1 集群节点监控 278 6.1.1 集群健康值 278 6.1.2 集群状态 279 6.1.3 集群统计 280 6.1.4 集群任务管理 280 6.1.5 待定集群任务 281 6.1.6 节点信息 281 6.1.7 节点统计 282 6.2 集群分片迁移 283 6.3 集群节点配置 284 6.3.1 主节点 285 6.3.2 数据节点 286 6.3.3 客户端节点 286 6.3.4 部落节点 287 6.4 节点发现 287 6.4.1 主节点选举 288 6.4.2 故障检测 288 6.5 集群平衡配置 289 6.5.1 分片分配设置 289 6.5.2 基于磁盘的配置 290 6.5.3 分片智能分配 291 6.5.4 分片配置过滤 292 6.5.5 其他集群配置 293 6.6 小结 293 第7章 索引分词器 294 7.1 分词器的概念 294 7.2 中文分词器 298 7.3 插件 300 7.3.1 插件管理 301 7.3.2 插件安装 301 7.3.3 插件清单 302 7.4 小结 304 第8章 高级配置 305 8.1 网络相关配置 305 8.1.1 本地网关配置 305 8.1.2 HTTP配置 306 8.1.3 网络配置 307 8.1.4 传输配置 308 8.2 脚本配置 310 8.2.1 脚本使用 311 8.2.2 脚本配置 313 8.3 快照和恢复配置 318 8.4 线程池配置 324 8.5 索引配置 326 8.5.1 缓存配置 326 8.5.2 索引碎片分配 329 8.5.3 合并 332 8.5.4 相似模块 332 8.5.5 响应慢日志监控 333 8.5.6 存储 335 8.5.7 事务日志 336 8.6 小结 337 第9章 告警、监控和权限管理 338 9.1 告警 338 9.1.1 安装 338 9.1.2 结构 339 9.1.3 示例 352 9.1.4 告警输出配置 354 9.1.5 告警管理 355 9.2 监控 356 9.2.1 安装 356 9.2.2 配置 357 9.3 权限管理 360 9.3.1 工作原理 361 9.3.2 用户认证 361 9.3.3 角色管理 366 9.3.4 综合示例 368 9.4 小结 369 第10章 ELK应用 370 10.1 Logstash 370 10.1.1 配置 371 10.1.2 插件管理 374 10.2 Kibana配置 377 10.2.1 Discover 379 10.2.2 Visualize 381 10.2.3 Dashboard 383 10.2.4 Settings 386 10.3 综合示例 387 10.4 小结 390 附录 Elasticsearch 5.0的特性与改进 391
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

johnny233

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值