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可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
3月前
|
自然语言处理 大数据 应用服务中间件
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
80 5
|
3月前
|
自然语言处理 Java 网络架构
elasticsearch学习三:elasticsearch-ik分词器的自定义配置 分词内容
这篇文章是关于如何自定义Elasticsearch的ik分词器配置以满足特定的中文分词需求。
171 0
elasticsearch学习三:elasticsearch-ik分词器的自定义配置 分词内容
|
4月前
|
数据可视化 Java Windows
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
本文介绍了如何在Windows环境下安装Elasticsearch(ES)、Elasticsearch Head可视化插件和Kibana,以及如何配置ES的跨域问题,确保Kibana能够连接到ES集群,并提供了安装过程中可能遇到的问题及其解决方案。
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
|
9天前
|
存储 缓存 监控
极致 ElasticSearch 调优,让你的ES 狂飙100倍!
尼恩分享了一篇关于提升Elasticsearch集群的整体性能和稳定性措施的文章。他从硬件、系统、JVM、集群、索引和查询等多个层面对ES的性能优化进行分析,帮助读者提升技术水平。
|
2月前
|
测试技术 API 开发工具
ElasticSearch的IK分词器
ElasticSearch的IK分词器
62 7
|
3月前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
266 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
3月前
|
自然语言处理 搜索推荐 Java
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(一)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图
69 0
|
3月前
|
存储 自然语言处理 搜索推荐
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
47 0
|
4月前
|
存储 自然语言处理 关系型数据库
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
聚合、补全、RabbitMQ消息同步、集群、脑裂问题、集群分布式存储、黑马旅游实现过滤和搜索补全功能
|
2月前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
60 5