Elasticsearch 架构
存储流程
ES 存储数据的流程可以从三个角度来阐述:
- 从集群的角度来看,数据写入会先路由到主分片,在主分片上写入成功后,会并发写副本分片,最后响应给客户端。
- 从分片的角度来看,数据到达分片后需要对内容进行格式校验、分词处理然后再索引数据。
- 从节点的角度来看,ES 数据持久化的步骤可归纳为:Refresh、写 Translog、Flush、Merge。
...大约 13 分钟
ES 存储数据的流程可以从三个角度来阐述:
Elasticsearch 支持多种搜索:
Elasticsearch 是一款基于 Lucene 的开源分布式搜索引擎。
Term 是表达语意的最小单位。搜索和利用统计语言模型进行自然语言处理都需要处理 Term
Term 级别查询:Term / Range / Exists / Prefix / Wildcard
在 ES 中,Term 查询,对输入不做分词。会将输入作为一个整体,在倒排索引中查找准确的词项,并且使用相关度计算公式为每个包含该词项的文档进行相关度计算。
Elasticsearch 是一个基于 Lucene 的搜索和数据分析工具,它提供了一个分布式服务。Elasticsearch 是遵从 Apache 开源条款的一款开源产品,是当前主流的企业级搜索引擎。
如果我们启动了一个单独的节点,里面不包含任何的数据和索引,那我们的集群看起来就是一个包含空内容节点的集群。
Figure 1. 包含空内容节点的集群
Elasticsearch 官方的 High Level REST Client 在 7.1.5.0 版本废弃。所以本文中的 API 不推荐使用。
在 pom.xml 中引入以下依赖:
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.17.1</version>
</dependency>
文本分析是将非结构化文本转换为针对搜索优化的结构化格式的过程。
文本分析使 Elasticsearch 能够执行全文搜索,其中搜索返回所有相关结果,而不仅仅是完全匹配。
文本分析可以分为两个方面:
foxes
标准化为 fox
。Elasticsearch 的逻辑存储被设计为层级结构,自上而下为:
index -> type -> mapping -> document -> field