搜索引擎|全文搜索技术Elasticsearch

总结搜索引擎技术的知识归纳,工作中用到过 ES,以此拓展知识面。


这里写图片描述

1 全文检索技术

  全文搜索指计算机搜索程序通过扫描文章中的每一个词,对每一个词简历索引,
指明该词在文章中出现的次数和位置。当用户查询时,搜索程序就根据事先建
立好的索引行查找,将结果反馈给用户。

2 倒排索引

	什么是倒排索引?
	由记录(如一个文本内容)确定属性的值,是正常的索引方式。由属性的值确定记录的位置,这种方式叫做倒排索引。倒排索引一般表示为一个关键词,它出现的频度
(即出现的次数)和位置。
	建立倒排索引是搜索引擎最核心关键的步骤之一。
	从如下的示例中可以看到,关键字是按照字符顺序排序的。Lucene可用二元搜索算法
(即二叉查找树搜索算法)快速定位关键字。
	如:有两篇文章
	文章1Tom lives in GuangZhou,I live in GuangZhou too.
	文章2He once lived in Shanghai.
	根据关键词建立如下的倒排索引:

这里写图片描述

3 ES及其优点

	ES是基于Lucene构建的开源,分布式,Restful接口全文搜索引擎。
特点:
	分布式文档数据库,高可用,高扩展。
	可以拓展至以百计的服务器存储以及PB级的数据进行搜索;
	提供复制机制,集群中的某台服务器宕机,集群可正常运作,宕机服务器丢失数据可恢复到其它可用节点;
	可以在很短的时间内存储,搜索,分析大量的数据。实时搜索场景性能优秀。

4 ES术语及其概念

1)索引词(term)
	索引词(term)是一个能够被索引的精确值,可以通过term查询进行准确的搜索。
(2)文本(text)
	文本是非结构化的文字,会被拆分为一个个的索引词,存储在索引库。
搜索引擎可以根据关键词搜索出原文本。
(3)分析(analysis)
	分析是将文本转换为索引词的过程,分析的结果依赖于分词器。
(4)集群(cluster)
	集群由一个或多个节点组成,对外提供索引和搜索服务。一个集群有唯一的名称,
默认为“Elasticsearch”。当多个节点设置相同的集群名称时,它们就会自动加入集群。
集群的名称不能相同,一个节点只能加入一个集群。
(5)节点(node)
	一个节点是一个逻辑独立的服务,可存储数据并参与集群的索引和搜索功能。
(6)路由(routing)
	当存储一个文档时,它会存储在唯一的主分片中,具体哪个分片是通过计算散列值进行选择。
(7)分片(shard)
	分片是单个Lucene实例,索引是指向主分片和副本分片的逻辑空间,比如有十亿个文档无法存储
在一台物理机,ES可将它的索引分解为多个分片进行存储。创建索引时,可以定义你想要的分片数量。
每个分片是一个全功能,独立的单元,可以托管在集群的任何节点。
(8)主分片(primary shard)
	一个文档首先会存储在主分片中,然后复制到不同的副本中。默认一个索引有5个主分片1个副本分片,
分片数量可以事制定。
(9)副本分片(replica shard)
	每一个分片有零个或多个副本。副本是主分片的复制。其目的是:增加高可用性;提高性能;
允许水平分割拓展数据。
(10)复制(replica)
	复制可以对故障进行转移,保证系统的高可用。一个复制分片不会存储在同一个节点中。
还可以提高并发量,搜索可以在所有分片上并行执行。
(11)索引(index)
	索引是具有相同结构的文档的集合。如:一个客户信息的索引包含一个产品目录的索引,
一个订单数据的索引等。索引名小写,可以通过索引名执行索引,搜索,更新和删除操作。
(12)类型(type)
在索引中可以定义一个或多个类型。类型是索引的逻辑分区。
(13)文档(document)
	文档是存储在ES中的一个JSON格式的字符串。就像关系型数据库表的一行。
每个存储在索引中的一个文档都有一个类型和一个ID。原始的JSON文档被存储在一个叫_source的字段中,
搜索文档的时候,默认返回的就是这个字段。
(14)映射(mapping)
	映射像关系型数据库中的表结构,每一个索引都有一个映射,它定义了索引中每一个字段类型,
以及一个索引范围的设置。
(15)字段(field)
	文档包含零个或多个字段,字段可以是一个简单值或是一个数组或是一个对象的嵌套结构。
字段类似于关系型数据库中表的列,每个字段都对应一个字段类型。
 (16)来源字段(source field)
	默认情况下,原始文档将存储在_source字段中,查询返回的就是这个字段。
(17)主键(ID)
	ID是一个文档的唯一标识,如果存储的时候没有提供ID,系统会自动生成一个ID,文档的index,type,
id必须是唯一的。

5 ES对外提供的接口形式

1.	对外提供Http形式的接口。通过JSON格式和REST约定对外提供。
2.	对于java语言提供友好面向对象操作的API。

6 索引

	索引是具有相同文档结构的集合,ES大部分操作都是基于索引来完成。索引涉及其映射,
索引设置,监控,索引状态和文档操作管理。
	索引分析:索引分析的过程由分析器完成。分析器由以下3个功能组合完成。
<1>字符过滤器(character filter):它能够过滤转换文本中的一些字符。如去除HTML标记,或者转换“&”为“and”.
<2>分词器(tokenizer):它可以根据空格,逗号,甚至词意将文本字符串划分成一个一个词。
<3>标记过滤器:每个词都会经过它的处理。它可以修改一个词(如将“Hello”转为小写),去掉词
(如去掉连词“and”,“the”等),或增加词(如增加同义词像”jump”和“leap”等。)

7 映射

	映射是定义存储和索引的文档类型以及字段的过程。索引中的每一个文档都有一个类型,
每种类型都有它自己的映射。一个映射定义了文档结构内每个字段的数据类型。映射通过配置来
定义字段类型与该类型相关联的元数据的关系。映射是ES内部结果对外的一个展现方式。

8 搜索

	索引和映射只解决了存储问题,搜索是ES的核心功能。
(1)ES支持丰富的搜索搜索场景:
	<1>排序(也包含各种聚合计算)
	<2>各种条件过滤
	<3>脚本支持(对搜索结果进行计算表达式的支持)
(2)重新评分机制
	ES搜索单个单词比较快,但是搜索短语是效率比较低。ES提供重新评分机制来提高搜索效率。
(可根据数据搜索热度打分,衰减函数打分,权重打分等策略)
(3)滚动查询
	ES提供滚动插叙API,解决类似分页查询请求。
(4)功能丰富的DSL(domain-specific language 领域特定语言)支持。
	如字段查询;复合查询;连接查询;地理查询;跨度查询;高亮显示等。

9 聚合

	聚合是一种基于搜索数据的汇总。聚合分为三大类。
1.度量聚合:在一组文档中对某一个数字型字段进行计算得出指标值。
2.分组聚合。
3.管道聚合:这一类的聚合的数据源是其他聚合的输出,然后进行相关指标的计算。可以完成复杂的嵌套聚合操作。
(1)度量聚合
		平均值聚合
		最大值聚合
		最小值聚合
		求和聚合
		统计聚合
		百分比聚合
		百分比分级聚合
		最高命中排行聚合
		地理边界聚合
		地理重心聚合

(2)分组聚合
		子聚合
		直方图聚合
		日期直方图聚合
		时间范围聚合
		范围聚合
		过滤聚合
		空值聚合
		嵌套聚合
		索引词聚合
		地理点距离聚合
		地理散列网格聚合
		
(3)管道聚合
		平均分组聚合
		总和分组聚合
		最大分组聚合
		最小分组聚合
		统计分组聚合
		百分位分组聚合
		差值聚合

10 ES集群管理

	包含对ES集群节点的监看那个,集群分片的迁移,集群节点的配置,节点发现,集群平衡
位置等。ES利用集群进行水平拓展节点,达到支持处理海量数据的能力。

11 索引分词器

	在ES中,索引分析模块是可以通过注册分词器来进行配置。分词器的作用是当一个文档被索引的时候,
分词器从文档中提取若干词元,来支持索引的存储和搜索。分词器,是由一个分解器,以及零个或多个
词元过滤器组成。常用的有:一元分词StandardAnalyzer、二元分词CJKAnalyzer、基于词库的分
词SmartChineseAnalyzer

12 ELK

1E指的是Elasticsearch。
(2L指的是Logstash。是一个灵活的开源的数据收集,处理,传输的工具。Logstash可处
理日志事件,非结构化的数据,并把他们输出来,可以把数据输出到ES中去。
(3K指的是Kibana。是一个开源的数据可视化平台,可以把数据以强大的图形化方式展示出来。
	在业界把Elasticsearch+Logstash+Kibana简称ELK。组合应用于专门处理日志数据,
存储检索分析日志,展示日志。
[1]组合一(Log4J+FileBeat+ElasticSearch+KibanaJava端通过Log4J记录日志到文件,FileBeat运行在Java端服务器上监控日志文件的变
化,然后把变化的日志信息直接通过网络发给ElasticSearch保存。这种情况不需LogStash[2]组合二(Log4J+FileBeat+LogStash+ElasticSearch+KibanaJava端通过Log4J记录日志到文件,FileBeat运行在Java端服务器上监控日志文件的变
化,然后把变化的日志信息通过网络发给LogStashLogStash再通过网络发ElasticSearch保存;
	FilebeatElastic收购的一个产品,收购前和LogStash是竞争关系, Filebeat更轻
量,占用资源更少,但logstash 具有filter功能,能过滤分析日志。因此如果不需要对日志
进行过滤就用组合一,否则就组合二。

13 ES可以代替关系型数据库吗?

1、es没有事务,缺乏访问控制。
2、是近实时的,变更不能立现。
3、一些关系比较复杂的数据用mysql这样的关系数据库用sql很容易实现,但是es就相当的复杂了。
4、成本也比数据库高,几乎靠吃内存提高性能。
5、ES只是一个搜索引擎,适合存储一些(有限的)静态数据。在分布式系统中常用ES作为前端静态数据存储,
最终的数据存储都是在MySQL里面的。并且ES都是更新频率很低的数据,因为ES更新数据会引起整个ES性能低下。

14 常用的全文检索技术使用场景选择术

1Lucene
	Lucene是一个全文搜索引擎工具包,提供了完整的查询引擎,索引引擎,和部分文本分析引擎。
是Solr、ES等的底层,提供了数据索引的保存、检索等基础功能,但是没有提供并发写入、网络接口等功能。
因此一般不直接用Lucene开发。
(2Solr和ES的比较
	ES是后起之秀,Solr比较成熟;
	Solr对于“一边加入索引、一边搜索”这种实时搜索,性能比较低;
	ES对于实时搜索,性能比较好,而且ES做集群更简单;
	没有特殊理由选择ES;
附录:StackOverFlow关于性能讨论:
http://blog.socialcast.com/realtime-search-solr-vs-elasticsearch
https://stackoverflow.com/questions/10213009/solr-vs-elasticsearch
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不甩锅的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值