首页 > IT基础架构 > > Elasticsearch入门,看这篇就够了
我将会从下面四个方面去介绍 Elasticsearch。
一、Elasticsearch是什么?
二、Elasticsearch全文检索的原理是什么?
三、Elasticsearch的核心数据类型有哪些?
四、怎么判断搜索准确性?
Elasticsearch是一个实时的分布式搜索分析引擎,它可以使你以前所未有的速度和规模,去探索你的数据。
它被用来做全文检索,结构化搜索,分析以及这三个功能的组合:
(这是官方的简介)
ES的生态圈
ES生态圈主要包含这几个好基友。

ES的用途
(1)用作搜索系统数据存储
(2)用作日志分析
ES的特点和优势
几个重要概念
文档
文档相当于关系型数据库的一行记录
举例:下图的JSON格式数据就是一个文档

索引(index)
索引是文档的容器,是一类文档的集合
索引需要定义Mapping和Settings
索引相当于关系型数据库的一个表
举例:下面的结构是一个索引

分词
分词是把全文本转换成一系列单词的过程。
分词器是处理分词的模块。
分词器的处理过程可以分为三个步骤:
处理中文分词的第三方插件:analysis-icu、IK、THULAC
安装 analysis-icu 插件的方式
elasticsearch-plugin install analysis-icuREST API
ES支持http协议访问数据,增删改查都提供了相应的REST API

集群(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。
使用分片有两个优点:
副本(Replica Shard)
用以解决数据高可用的问题。副本是对主分片的拷贝。
这里先解释什么是正排索引,什么是倒排索引。
正排索引
好比一本书的目录。
我们通过书本的目录,找到相关内容的页码,再去查询该页码下,我们想要查找的内容。

倒排索引
主要是为了解决:你想知道某个关键词,在书中的哪一页出现过,这类的问题。
倒排索引需要把文本拆分成一个一个单词,并且标记这个单词在文本中的位置,当我们想查找与某个关键词相关的文本内容时,我们通过倒排索引查找,就可以很轻易找到我们想要查找的内容。

全文搜索引擎也是通过倒排索引去实现的。
例如:通过百度搜索“倒排索引”,我们的关键词是“倒排索引”。
百度搜索引擎就可以将与“倒排索引”相关的网页内容进行聚合,并且对查询到的结果集合中的每一个网页进行相关性打分,分值高的会排在前面。



下图的图示中,
绿色的圆圈,表示应该被返回的结果
橙色的三角形,表示不应该被返回的结果
True Positive(TP):应该返回的结果,被返回
False Positive(FP):不应该返回的结果,被返回
True Negatives(TN):应该返回的结果,不被返回
False Negatives(FN):不应该返回的结果,不被返回

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31509949/viewspace-3140290/ ,如需转载,请注明出处,否则将追究法律责任。