es head 启动命令 启动elasticsearch命令_数据


我将会从下面四个方面去介绍 Elasticsearch。

目录

一、Elasticsearch是什么?
二、Elasticsearch全文检索的原理是什么?
三、Elasticsearch的核心数据类型有哪些?
四、怎么判断搜索准确性?

一、Elasticsearch是什么?

Elasticsearch是一个实时的分布式搜索分析引擎,它可以使你以前所未有的速度和规模,去探索你的数据。

它被用来做全文检索结构化搜索分析以及这三个功能的组合:

  • Wikipedia使用Elasticsearch提供了高亮片段的全文搜索,还有search-as-you-type和did-you-mean的建议。
  • 卫报使用Elasticsearch将其社交媒体提供给公众有关新文章的实时反馈。
  • Stack Overflow将定位查询整合到全文检索中去,并使用more-like-this接口去查找相关的问题和回答。
  • GitHub使用Elasticsearch对1300亿行代码进行查询。

(这是官方的简介)

ES的生态圈

ES生态圈主要包含这几个好基友。


es head 启动命令 启动elasticsearch命令_数据_02


ES的用途

(1)用作搜索系统数据存储

  1. 应用程序将数据写入到mysql或其他数据库当中
  2. mysql把数据同步到ES中
  3. 应用程序查询数据时,从ES中搜索数据

(2)用作日志分析

  1. 日志通过kafka传到Logstash进行日志数据聚合
  2. Logstash将日志存储到ES中
  3. 通过Grafna或者Kibana对数据进行监控和分析

ES的特点和优势

  1. 分布式实时文件存储,可将每一个字段存入索引,使其可以被检索到
  2. 实时分析的分布式搜索引擎,分布式,索引拆分成多个分片,集群中的数据节点可以承载一个或多个分片,并且协调和处理各种操作,负载再平衡和路由大多数情况下自动完成。
  3. 可以扩张到上百台服务器,处理PB级别的结构化和非结构化数据,也可以运行在单台PC上。
  4. 支持插件机制,分词插件、同步插件、Hadoop插件、可视化插件。

几个重要概念

文档

  • Elasticsearch 是面向文档的,文档是所有可搜索数据的最小单位
  • Elasticsearch里面的文档是以 JSON 的格式保存。
  • 每个文档都有一个唯一的 Doc ID

文档相当于关系型数据库的一行记录

举例:下图的JSON格式数据就是一个文档


es head 启动命令 启动elasticsearch命令_启动elasticsearch命令_03


索引(index)

索引是文档的容器,是一类文档的集合

索引需要定义Mapping和Settings

  • Mapping定义文档字段的类型
  • Settings定义不通的字段分布,比如说你的索引需要多少个分片

索引相当于关系型数据库的一个表

举例:下面的结构是一个索引


es head 启动命令 启动elasticsearch命令_搜索_04


分词

分词是把全文本转换成一系列单词的过程。

分词器是处理分词的模块。

分词器的处理过程可以分为三个步骤:

  1. Character Filters 处理原始文本,比如说去除html标签
  2. Tokenizer 按照一些规则,将文本切分成一个个单词
  3. Token Filters 将切分后的单词进行加工,例如:单词转小写、过滤停用词、增加同义词等

处理中文分词的第三方插件:analysis-icu、IK、THULAC

安装 analysis-icu 插件的方式


elasticsearch-plugin install analysis-icu


REST API

ES支持http协议访问数据,增删改查都提供了相应的REST API


es head 启动命令 启动elasticsearch命令_Elastic_05


集群(Cluster)

Elasticsearch是分布式架构,一个集群可以有一个或多个节点。

分布式架构的好处

  • 方便对存储水平扩容
  • 提高系统高可用性,部分节点停止服务,整个集群的服务不受影响

集群配置有两种方式:

(1)配置文件

vim config/elasticsearch.yml


cluster.name: dmall_xxx


(2)命令行指定

在命令行启动ES时,指定参数 -E cluster.name=xxx 进行设定。

节点(node)

节点是Elasticsearch的一个实例,本质上是一个java进程。

一台机器可以运行多个Elasticsearch进程,但生产环境中一般建议一台机器只运行一个es实例。

节点配置有两种方式:

(1)配置文件

vim config/elasticsearch.yml


node.name: dmall_xxx_node1


(2)命令行指定

在命令行启动ES时,指定参数 -E node.name=node1 进行设定。

每个节点启动之后,会分配一个UID,保存在data目录下。

分片(shard)

主分片(Primary Shard)

分片是一个运行的 Lucene 实例,ES可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上,构成分布式搜索。这个过程对用户来说是透明的。

主分片在索引创建时指定,后续不允许修改,除非 Reindex。

使用分片有两个优点:

  1. 可以水平扩展。
  2. 可以并发提高性能。

副本(Replica Shard)

用以解决数据高可用的问题。副本是对主分片的拷贝。

  • 副本分片数,可以同台调整
  • 增加副本数,还可以在一定程度上,提高服务的高可用性(读取的吞吐)

二、Elasticsearch全文检索的原理是什么?

这里先解释什么是正排索引,什么是倒排索引。

正排索引

好比一本书的目录。

我们通过书本的目录,找到相关内容的页码,再去查询该页码下,我们想要查找的内容。


es head 启动命令 启动elasticsearch命令_数据_06

图片来源于网络

倒排索引

主要是为了解决:你想知道某个关键词,在书中的哪一页出现过,这类的问题。

倒排索引需要把文本拆分成一个一个单词,并且标记这个单词在文本中的位置,当我们想查找与某个关键词相关的文本内容时,我们通过倒排索引查找,就可以很轻易找到我们想要查找的内容。


es head 启动命令 启动elasticsearch命令_Elastic_07

图片来源于网络

全文搜索引擎也是通过倒排索引去实现的。

例如:通过百度搜索“倒排索引”,我们的关键词是“倒排索引”。

百度搜索引擎就可以将与“倒排索引”相关的网页内容进行聚合,并且对查询到的结果集合中的每一个网页进行相关性打分,分值高的会排在前面。


es head 启动命令 启动elasticsearch命令_数据_08


三、Elasticsearch的核心数据类型有哪些?


es head 启动命令 启动elasticsearch命令_Elastic_09


四、怎么判断搜索准确性?


es head 启动命令 启动elasticsearch命令_es head 启动命令_10


下图的图示中,

绿色的圆圈,表示应该被返回的结果

橙色的三角形,表示不应该被返回的结果

True Positive(TP):应该返回的结果,被返回

False Positive(FP):不应该返回的结果,被返回

True Negatives(TN):应该返回的结果,不被返回

False Negatives(FN):不应该返回的结果,不被返回


es head 启动命令 启动elasticsearch命令_启动elasticsearch命令_11


es head 启动命令 启动elasticsearch命令_Elastic_12