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

版权声明:本文为博主原创文章,欢迎点赞,转载,转载请注明出处。 https://blog.csdn.net/u014534808/article/details/88088054

概述

接上一篇《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/releases/download/v6.4.3/elasticsearch-analysis-ik-6.4.3.zip

安装之后重启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
  1. 检查节点状态
curl localhost:9200/_cat/nodes?v
  1. 查询所有索引
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原理简介

猜你喜欢

转载自blog.csdn.net/u014534808/article/details/88088054
今日推荐