0
点赞
收藏
分享

微信扫一扫

10:搜索引擎篇(6)

天际孤狼 2022-03-25 阅读 26

一、什么是倒排索引?有什么好处?

正排索引:书本的目录

倒排索引:书本的索引

图书和搜索引擎的对比

图书:

正牌索引-目录页

倒排索引-索引页

搜索引擎:

正排索引-文档Id到文档内容和单词的关联

倒排索引-单词到文档Id的关系

倒排索引的核心组成

倒排索引包含两个部分:

(1)单词词典,记录所有文档的单词,记录单词到倒排列表的关联关系

(2)倒排列表(Posting List)- 记录了单词对应的文档结合,由倒排索引项组成

倒排索引项:

> 文档ID

> 词频TF -该单词在文档中出现的次数,用于相关性评分

> 位置 Postion - 单词在文档中分词的位置,用于语句搜索 (phrase query)

> 偏移 Offset-记录单词的开始结束位置,实现高亮显示

如:

ES 的倒排索引

(1)ES 的JSON 文档中的每个字段,都有自己的倒排索引

(2)可以指定对某些字段不做索引

> 优点:节省存储空间

> 缺点:字段无法被搜索


二、ES了解多少?说说你们公司的ES集群架构?

ES: 是一个基于Lucene框架的搜索引擎产品,提供了Restful风格的操作接口。 

Lucene:是一个非常高效的全文检索引擎框架。

ES的一些核心概念:

索引 index                             --> table

文档 document                      -->  row

字段 field text\keyword\byte  --> 列

映射Mapping                         --> Schema

查询方式 DSL                        --> SQL  

ES优点:

1、elasticsearch是一个基于Lucene的高扩展的分布式搜索服务器,支持开箱即用。
2、elasticsearch隐藏了Lucene的复杂性,对外提供Restful 接口来操作索引、搜索。
3、支持分布式,扩展性好,可部署上百台服务器集群,处理PB级数据。
4、近实时的获取索引数据、搜索数据。
5、降低全文检索的学习曲线,可以被任何编程语言调用。

 

ES集群架构:

 


三、如何进行中文分词?用过哪些分词器?

1、Analyzer 的组成

> Character Filters : 针对原始文本进行处理,如:去除html

> Tokenizer : 按照规则切分为单词

> Token Filter :将切分的单词进行加工、大小写转化、增加同义词

2、ES 内置分词器

> Standard Analyzer - 默认分词器,按词切分,小写处理

> Simple Analyzer - 按照非字母切分,非字母的都被去除,小写处理

> Stop Analyzer - 停用词过滤,小写处理,如:the, a, is

> Whitespace Analyzer - 按照空格切分,不转小写

> Keyword Analyzer - 不分词,直接将输出当作term输出

> Patter Analyzer - 正则表达式分词

> Language - 提供30多种常见语言的分词器

> Customer Analyzer - 自定义分词器

3、中文分词的难点

> 中文句子,切分成一个一个词,而不是一个一个字

> 英文中,单词有自热的空格作为分隔

> 一句中文,在不同的上下文,有不同的理解

如:这个苹果,不大好吃 / 这个苹果,不大,好吃!

4、其他中文分词插件

> ICU Analyzer

> IK Analyzer

5、查看分词粒度

http://172.31.100.175:9200/ingredients_es_index/_analyze/


四、ES写入数据的工作原理是什么?

1、客户端发写数据的请求时,可以发往任意节点。这个节点就会成为coordinating node协调节点。

2、计算的点文档要写入的分片:计算时就采用hash取模的方式来计算。

3、协调节点就会进行路由,将请求转发给对应的primary sharding所在的datanode。

4、datanode节点上的primary sharding处理请求,写入数据到索引库,并且将数据同步到对应的replica sharding

5、等primary sharding 和 replica sharding都保存好文档了之后,返回客户端响应。

 

 


 

五、ES查询数据的工作原理是什么?

1、客户端发请求可发给任意节点,这个节点就成为协调节点。

2、协调节点将查询请求广播到每一个数据节点,这些数据节点的分片就会处理改查询请求。

3、每个分片进行数据查询,将符合条件的数据放在一个队列当中,并将这些数据的文档ID、节点信息、分片信息都返回给协调节点。

4、由协调节点将所有的结果进行汇总,并排序。

5、协调节点向包含这些文档ID的分片发送get请求,对应的分片将文档数据返回给协调节点,最后协调节点将数据整合返回给客户端。


六、ES部署时,要如何进行优化?

1)集群部署优化

调整ES的一些重要参数。path.data目录尽量使用SSD。定时JVM堆内存大小。 关于ES的参数,大部分情况下是不需要调优的,如果有性能问题,最好的办法是安排更合理的sharding布局并且增加节点数量。

2)更合理的sharding布局

让sharding和对应的replica sharding尽量在同一个机房。

3)Linux服务器上的一些优化策略

不要用root用户;修改虚拟内存大小;修改普通用户可以创建的最大线程数。

ES生态: ELK日志收集解决方案- filebeat(读log日志)-> logstash -> ElasticSearch -> kibana、Grafana、自研的报表平台。


举报

相关推荐

0 条评论