1)什么是ES?
a. ES是基于Apache Lucene的开源搜索引擎,Lucene是搜索引擎库,由Shay Banon最早创立。(这家伙为了他老婆才设计的)
b. ES使用java开发并使用Lucene作为核心来实现索引和搜索功能,它是通 过RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
2)为什么要用ES,它的优点是什么?
why:在搜索过程中,MySQL主要用于主键搜索查询。而随着业务量的需 求,我们同时需要大量的全文搜索。全文搜索需要匹配大量的文本,用 MySQL的like模糊查询将导致性能下滑。而ES全文搜索引擎就能保证大本 文的匹配查询性能。
优点:
3)ES原理
1)ES基本组件
ES主要是由,索引,类型,文档和字段组成的,类似于数据库
索引:ES中可以包含多个索引,每个索引可以包含多个类型,每一个类型包多个文档,每个文档包含多个字段
类型:用来定义数据机构,相当于表结构的描述,描述每个字段的类型. 主要用于mapping中,mapping在es中相当于sql中的创建schema
文档:ES里面最小的数据单元,好比一条数据。可以对文档进行索引,搜索,排序,过滤。ES使用JSON作为文档序列化格式
字段:数据库中列的概念,一个document可以有一个或多个field
例子:Get /megacorp/employee/1
2)倒排索引
– ES使用的是倒排索引的结构,采用Lucene倒排索引作为底层。一个索引由文档中所有不重复的列表构成。对于每一个词,都有一个包含它的文档列表。
– 为了创建倒排索引,首先将每个文档拆分成独立的词,然后创建一个包含所有不重复词条的排序列表,然后列出每个出现在哪个文档。
Eg.
String1: “study every day, good good up to forever ”
String2: “To forever, study every day, good good up”
我们能看见doc1和doc2都出现了以上的关键词,所以ES会把doc1和doc2找出来。但是doc1的匹配率更高,在显示时会先把doc1展示在前面。
?
3)分析器(analysis)
分析器是三个顺序执行的组件的组合(字符过滤器,分词器,表征过滤器)
字符过滤器:让字符在被分词前变得更整洁。比如说html_strip字符过滤器,可以用来删除所有HTML标签,并将HTML实体类转换成相应的Unicode字符,eg. á 转换成A
分词器:一个分析器必须包含一个分词器。分词器将字符串分割成单独的词(terms)或者表征(token). 比如说standard分词器会将字符串分割成单独的字词,删除大部分标点符号;比如说whitespace分词器,通过空格来分割文本
表征过滤器:分词结果的表征流会根据各自情况,传递给特定的表征过滤器。
表征过滤器可能修改,添加,或者删除表征。比如说lowercase表征过滤器,会将所有表征转换成小写;比如说stop表征过滤器,会删除所有可能会造成搜索歧义的停用词,比如a,the,and,is
自定义分析器:
在配置好stadard分词器,lowercase表征过滤器,stop表征过滤器后,
此外,除非我们告诉ES在哪里使用,否则分析器不会作用,所以我们要通过映射将它应用在一个string类型的字段上。
由于分析器不是全局的,在创建索引后,用analyze API来测试新的分析器。
4)排序(analysis)
默认情况下,结果会按照相关性进行排序。在ES的查询结果中,相关性分值会用_score字段来给出一个浮点的数值,结果集以_score进行倒序排列。
所谓相关性,即
?
1)集群构架
ES是分布式的集群,每一个节点其实就是Lucene。当用户搜索的时候,会随机挑选一台,然后这太机器自己知道数据在哪。
在ES中,默认clustername的值是ElasticSearch。由于一台服务器无法储存大量数据,ES把一个index里面的数据,分为多个shard,分布式地储存在各个服务器上面。
总而言之,一个集群至少有一个节点,每一个节点就是ES进程,节点可以有多个索引默认的。如果创建索引,那么索引将会有五个分片(primary shard, 主分片)构成的,每一个分片会有一个副本(replica shard,复制分片)
上图是一个3个节点的集群,可以看到主分片和对应的复制分片都不在同一个节点内。这样有利于某个节点挂掉了,数据也不会丢失。(类似hdfs思想)
?
2)ES的分布式原理
– 将文档分区到不同的容器或者分片(shards)中,它们可以存在于一个或者多个节点中
– 将分片均匀的分配到各个节点,对索引和搜索做负载均衡
– 沉余每一个分片,防止硬件故障造成的数据丢失
– 将集群任意一个节点上的请求路由到相应数据所在的节点
– 无论是增加节点,还是移除节点,分片都可以做到无缝的扩展和迁移
?
3)ES设计构架
错误描述: 在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报...
DELETEFROMTablesWHEREIDNOTIN(SELECTMin(ID)FROMTablesGROUPBYName) Min的话保...
4月11日20:30~22:00通过腾讯会议进行了第二次在线学习讨论我把学习笔记整理一下...
正则忽略大小写 – RegexOptions.IgnoreCase 例如: 复制代码 代码如下: Str = R...
本文实例讲述了Laravel框架源码解析之反射的使用。分享给大家供大家参考,具体如...
项目中用到的一些特殊字符和图标 html代码 XML/HTML Code 复制内容到剪贴板 div ...
工具:Eclipse,Oracle,smartupload.jar;语言:jsp,Java;数据存储:Oracle。...
Elasticsearch 是通过 Lucene 的倒排索引技术实现比关系型数据库更快的过滤。特...
复制代码 代码如下: % URL="http://news.163.com/special/00011K6L/rss_newstop....
上篇文章给大家介绍了 Java正则表达式匹配,替换,查找,切割的方法 ,接下来,...