ElasticSearch 学习笔记(三)-----ES的设计原理以及分词器说明

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 接上一篇《ElasticSearch 学习笔记(二)-----Elasticsearch的简介以及应用》,这篇,我们来学习ElasticSearch中的两个重要知识点,设计原理与分词器。

概述

接上一篇《ElasticSearch 学习笔记(二)-----Elasticsearch的简介以及应用》,这篇,我们来学习ElasticSearch中的两个重要知识点,设计原理与分词器。

设计原理

1.一个节点Node 运行着ES的实例,一个集群由一个或多个使用着同样名字(cluster.name)的节点组成,分享数据和负载。当Node 从集群中添加或者删除时,集群会重组自己,使数据平摊的更加均匀。

2.集群中需要一台master节点。master节点的左右就是掌管集群的管理工作,例如创建和删除索引。

创建一个索引 - index,shard, cluster

3.将数据添加到ES的前提是,我们需要一个索引(名词)index----一个存储与这个索引相对应数据的地方。实际上,index 仅仅只是一个命名空间来指向一个或多个实际的物理分片(shard)

4.一个分片(shard)是一个比较底层的工作单元来处理这个索引(index)的所有数据的一个切片(slice)。一个shard实际上是一个Lucene实例,在它的能力范围内拥有完整的搜索功能。我们所有文档的索引indexed(动词) 和存储工作都是在shard上,但这是透明的,我们不需要直接和shard通信。而是和我们创建的index(名词)通信。shards 是ES将数据分布式在你的集群的关键,想象下shards是数据的容器,文档存储在shards里,而shards被分配在集群的每一个节点Node里,当你的集群规模增长和降低时,ES会自动的在Node间迁移shards 以保持集群的负载均衡

应用场景

1.海量数据分析引擎

2.站内搜索引擎

3.数据仓库

分词器

分词器选择

ES 默认的分词器对中文的支持很不好,如下图所展示的默认分词器对美国留给伊拉克的是个烂摊子吗的分词结果:

从上图,我们可以看出默认的分词器对中文的支持不够好,其是按照空格来进行分词的。所以,我们需要选用一种能很好支持中文分词的分词器。中文分词我们通常选用IK分词器,以下是一款开源的ik分词器:

https://github.com/medcl/elasticsearch-analysis-ik

安装ik分词器

此处我们的ES版本为6.4.3,安装readme的说明,所以我们选用的分词器也为6.4.3版本

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik

安装之后重启ES,然后,测试下ik 分词器对美国留给伊拉克的是个烂摊子吗的分词效果。

集群状态说明

绿色,绿色表示ES集群处于完全健康的状态,所有主分片和副本分片都正常可用

黄色,黄色表示所有主分片可用,但是部分副本分片不可用

红色,表示部分主分片不可用,这种情况下最好对故障进行排除。

如果集群状态为红色,Head插件显示:集群健康值red。则说明:至少一个主分片分配失败。这将导致一些数据以及索引的某些部分不再可用。 尽管如此, ElasticSearch还是允许我们执行查询,至于是通知用户查询结果可能不完整还是挂起查询,则由应用构建者来决定。

基本用法-restful API

基本的restful API 有如下功能:

1.管理功能

 1.1. 检查集群状态,节点状态,索引的状态以及相关统计数据

 1.2. 管理集群、节点、索引数据以及源数据

2.维护索引

 2.1.基本操作

提供针对索引的基本CURD操作(Create【PUT】, Read【GET】, Update【POST】, and Delete【POST】)。

 2.2. 高级操作

提供分页,排序,过滤等高级操作。

操作示例

1.检查集群状态

curl localhost:9200/_cat/health?v

2.检查节点状态

curl localhost:9200/_cat/nodes?v

3.查询所有索引

curl localhost:9200/_cat/indices?v

postman的操作示例详细参见:

https://download.csdn.net/download/u014534808/10991675

部分细节说明:

  1. 地址栏中的变量设置,如下图中的eshost变量,我们可以在设置中增加一个环境变量。

2. 创建结构化索引

如上图所示,{{eshost}}/title 表示创建一个名称为 title 的索引,其属性有titleid,titlename,description,createTime。 其中属性的 type 表示匹配类型, keyword 表示关键字全匹配, text 表示模糊匹配。运行后的结果是:

3. 给索引插入数据

按照json 的数据格式,插入数据,插入后的结果如下:

4. 查询索引数据

我们用以下数据作为查询数据,看看查询结果

返回结果说明:

总共查询了5个分片区,匹配到了两条记录。其中_score表示匹配度,匹配度越高,_score 值也就越大,其是根据description属性来匹配的。hits 里表示匹配到的结果,这个等同于 lucene 中的hits。

{
    "took": 11,
    "timed_out": false,
    "_shards": {    
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 2,
        "max_score": 2.1216555,
        "hits": [
            {
                "_index": "title",
                "_type": "_doc",
                "_id": "1",
                "_score": 2.1216555,
                "_source": {
                    "titleid": "12",
                    "titlename": "这是一篇好文章",
                    "description": "今天是个好日子,又在家里宅了一天",
                    "createTime": "2019-03-04 21:18:18"
                }
            },
            {
                "_index": "title",
                "_type": "_doc",
                "_id": "2",
                "_score": 2.0137746,
                "_source": {
                    "description": "今天是个好日子,所以要出去走走",
                    "titlename": "美好的一天"
                }
            }
        ]
    }
}

总结

本文我们先介绍了ElasticSearch的设计原理,以及其应用场景。接着,我们介绍了一款标准的中文分词器,最后,我们介绍了基本ES 中基本的restful API, 并通过postman

参考文献

ElasticSearch原理简介进行了测试。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
1月前
|
Java Maven 开发工具
【ElasticSearch 】IK 分词器安装
【ElasticSearch 】IK 分词器安装
44 1
|
1月前
|
Oracle 关系型数据库 API
实时计算 Flink版产品使用合集之当sink到elasticsearch时,可以指定es的指定字段吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
实时计算 Flink版产品使用合集之当sink到elasticsearch时,可以指定es的指定字段吗
|
1月前
Elasticsearch【问题记录 02】【不能以root运行es + max virtual memory areas vm.max_map_count [65530] is too low处理】
【4月更文挑战第12天】Elasticsearch【问题记录 02】【不能以root运行es + max virtual memory areas vm.max_map_count [65530] is too low处理】
29 3
|
17天前
|
JSON 搜索推荐 大数据
Elasticsearch:从 ES|QL 到 PHP 对象
【6月更文挑战第9天】Elasticsearch 是一款强大的开源搜索引擎,适用于大数据处理和分析。在 PHP 开发中,使用 ES|QL 构建复杂查询后,通常需将查询结果转换为 PHP 对象。通过 `json_decode()` 函数解析 JSON 数据,可以实现这一目标。示例代码展示了如何将 Elasticsearch 响应转换为 PHP 对象并遍历数据。这样,我们可以进一步处理和操作数据,适应不同项目需求。随着技术和方法的更新,不断学习和适应将提升我们在开发中的效率和创新力。
43 10
|
13天前
|
自然语言处理 数据可视化 Linux
ElasticSearch安装ik分词器_使用_自定义词典
ElasticSearch安装ik分词器_使用_自定义词典
16 1
|
1月前
|
Prometheus 监控 Cloud Native
实时计算 Flink版操作报错之在使用ES时遇到“java.lang.IllegalStateException: The elasticsearch emitter must be serializable”,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
1月前
|
SQL 监控 API
实时计算 Flink版产品使用合集之可以用来同步数据到 Elasticsearch(ES)吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
实时计算 Flink版产品使用合集之可以用来同步数据到 Elasticsearch(ES)吗
|
1月前
|
自然语言处理 Java Maven
【ElasticSearch】分词器(ElasticSearchIK分词器)
【ElasticSearch】分词器(ElasticSearchIK分词器)
32 1
|
1月前
|
监控 搜索推荐 安全
面经:Elasticsearch全文搜索引擎原理与实战
【4月更文挑战第10天】本文是关于Elasticsearch面试准备的博客,重点讨论了四个核心主题:Elasticsearch的分布式架构和数据模型、CRUD操作与查询DSL、集群管理与性能优化,以及安全与插件扩展。文中通过代码示例介绍了如何进行文档操作、查询以及集群管理,并强调理解Elasticsearch的底层原理和优化策略对面试和实际工作的重要性。
39 6
|
1月前
|
存储 缓存 搜索推荐
深入理解Elasticsearch倒排索引原理与优化策略
总之,Elasticsearch的倒排索引是其高效全文搜索的核心。为了提高性能和可伸缩性,Elasticsearch采用了多种优化策略,包括压缩、分片、合并、位集合和近实时搜索等。这些策略使Elasticsearch成为处理大规模文本数据的强大工具。
132 0