
总结与回顾
基本概念
- 一个 Elasticsearch 集群可以运行在单节点上,也支持运行在多个服务器上,实现数据和服务的水平扩展
- 从逻辑角度看,索引是一些具有相似结构的文档的集合
- 物理角度看,分片是一个 Lucene 的实例。分片存储了索引的具体数据,分片可以分布在不同的节点之上。副本分片除了提高数据的可靠性,还能一定程度提升集群查询的性能
- Elasticsearch 文档可以是任意的 JSON 格式的数据
- 将文档写进 Elasticsearch 的过程叫索引(indexing)
- Elasticsearch 提供了 REST API 和 Transport API 两种方式,建议使用 REST API
搜索和 Aggregation
- Precosion 指除了相关的结果,还返回了多少不相关的结果
- Recall 衡量有多少相关的结果,实际上并没有返回
- 精确值包括:数字,日期和某些具体的字符串
- 全文本:是需要被检索的非结构文本
- Analysis 是将文本转换成倒排索引中的 Terms 的过程
- Elasticsearch 的 Analyzer 是 Char_filter -> Tokenizer -> Token Filter 的过程
- 要善于利用 _analyze API 去测试 Analyzer
- Elasticsearch 搜索支持 URI Search 和 REST BODY 两种方式
- Elasticsearch 提供了 Bucket / Metric / Pipeline / Matrix 四种方式的聚合
文档 CRUD 与 Index Mapping
- 除了 CRUD 操作外,Elasticsearch 还提供了 bulk,mget 和 mseach 等操作。从性能的角度上说,建议使用,以提升性能。但是,单次操作的数据量不要过大,以免引发性能问题
- 每个索引都有一个 Mapping 定义。包含文档的字段及类型,字段的 Analyzer 的相关配置
- Mapping 可以被动态的创建,为了避免一些错误的类型推算或者满足你特定的需求,可以显示的定义 Mapping
- Mapping 可以动态创建,也可以显示定义。你可以在 Mapping 中定制 Analyzer
- 你可以为字段指定定制化的 analyzer,也可以为查询字符串指定 search_analyzer
- Index Template 可以定义 Mapping 和 Settings,并自动的应用到新创建的索引之上,建议合理的使用 Index Template
- Dynamic Template 支持在具体的索引上指定规则,为新增加的字段指定相应的 Mappings
自我测试(一)
- 判断题:ES 支持使用 HTTP PUT 写入新文档,并通过 Elasticsearch 生成文档 Id
- 判断题:Update 一个文档,需要使用 HTTP PUT
- 判断题:Index 一个已存在的文档,旧的文档会先被删除,新的文档再被写入,同时版本号加 1
- 尝试描述创建一个新的文档到一个不存在的索引中,背后会发生一些什么?
- ES 7 中的 合法的 type 是什么?
- 精确值和全文的本质区别是什么?
- Analyzer 由哪几个部分组成?
自我测试(二)
- 尝试描述 match 和 match_phrase 的区别
- 如果你希望 match_phrase 匹配到更多结果,你应该配置查询中什么参数?
- 如果 Mapping 的 dynamic 设置成 strict ,索引一个包含新增字段的文档时会发生什么?
- 如果 Mapping 的 dynamic 设置成 false,索引一个包含新增字段的文档时会发生什么?
- 判断:可以把一个字段的类型从 integer 改成 long,因为这两个类型是兼容的
- 判断:你可以在 Mapping 文件中为 indexing 和 searching 指定不同的 analyzer
- 判断:字段类型为 Text 的字段,一定可以被全文搜索
Share
WeiBo
Twitter
QZone
WeChat
←
→
↑
↓